ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SQL] MySQL - 데이터 가져오기 (2)
    데이터분석/SQL 2023. 3. 9. 22:20

    데이터 정렬하기

    ORDER BY는 가져온 데이터를 정렬할 때 사용하는 키워드입니다.

    오름차순이 디폴트이고, 입력한 [컬럼 이름]의 값을 기준으로 모든 row를 정렬하게 됩니다.

    여러 컬럼을 정렬하고 싶다면 [컬럼 이름]을 복수 개 입력하면 되는데,

    위치한 순서대로 정렬합니다.

    SELECT 절에서 입력한 컬럼 순서대로 컬럼 번호로 정렬도 가능합니다.

     

    예를 들어, 포켓몬의 번호와 이름을 번호 기준 내림차순으로 가져오고 싶다면 다음과 같이 작성합니다.

    SELECT number, name
    FROM mypokemon
    ORDER BY number DESC;

    이때, SELECT 절에서 입력한 순서에 따라 ORDER BY 1 DESC; 라고 해도 동일한 의미입니다.

     

    데이터의 순위를 정할 때 사용하는 키워드는 3가지가 있습니다.

    먼저 가장 기본 함수인 RANK는 공동 순위가 있는 경우 다음 순위로 건너 뛸 때 사용합니다.

    SELECT절에서 사용하고, 항상 ORDER BY와 함께 사용한다는 특징이 있습니다.

    DENSE_RANK 함수는 공동 순위가 있어도 다음 순위를 뛰어 넘지 않습니다.

    마지막으로 ROW_NUMBER는 공동 순위를 무시하고 싶을 때 사용합니다.

     

    말로만 하면 어려울 수 있으니, 실습을 통해 확인해볼까요?

    SELECT name, attack,
    	RANK() OVER (ORDER BY attack DESC) AS rank_rank,
    	DENSE_RANK() OVER (ORDER BY attack DESC) AS rank_dense_rank,
    	ROW_NUMBER() OVER (ORDER BY attack DESC) AS rank_row_number
    FROM mypokemon;

    결과를 비교해보기 위해 포켓몬의 공격 순위를 각각의 함수로 나타냈을 때의 결과를 구하는 쿼리를 작성해봤습니다.

    쿼리를 실행하면 아래와 같은 결과가 나옵니다.

    이렇게 보니까 각 키워드의 차이가 한눈에 보이시죠?

    상황에 따라 다른 키워드를 사용하시면 됩니다 👍

     

    데이터 그룹화하기

    GROUP BY는 컬럼에서 동일한 값을 가지는 row를 묶어 그룹화할 때 사용하는 키워드입니다.

    어쩌면 SQL의 꽃이라고 할 수도 있을 만큼 굉장히 자주 쓰이고 중요한 개념이죠.

    GROUP BY를 쓸 때는 SELECT절에 GROUP BY의 대상 컬럼과 그룹 함수만 사용이 가능하다는 특징이 있습니다.

    또한 ORDER BY와 비슷하게 [컬럼 이름]을 여러 개 입력해서

    여러 컬럼으로 그룹화도 가능하고,

    SELECT 절에서 쓰인 컬럼 순서 번호로도 그룹화가 가능합니다.

     

    GROUP BY의 기본 구조는 다음과 같습니다.

    SELECT [GROUP BY 대상 컬럼 이름], ..., [그룹 함수]
    FROM [테이블 이름]
    WHERE 조건식
    GROUP BY [컬럼 이름];

    GROUP BY의 조건을 걸 때는 WHERE 절에 조건을 넣는 것이 아니라

    HAVING이라는 키워드를 사용합니다.

    HAVING 뒤에 적은 조건식에서는 그룹 함수를 활용하게 됩니다.

    조건식이 True가 되는 그룹만 선택하게 되고

    항상 GROUP BY 뒤에 위치한다는 특징이 있습니다.

     

    그룹 함수에는 어떤 것들이 있을까요?

    COUNT, SUM, AVG, MIN, MAX와 같은 함수들이 있습니다.

    그룹 함수는 SELECT 절과 HAVING 절에서 사용할 수 있으며,

    집계할 컬럼 이름이 그룹의 기준이 되는 컬럼과 같아도 되고, 같지 않아도 됩니다.

    GROUP BY가 없는 쿼리에서도 사용이 가능한데, 이때는 전체 row에 함수가 적용됩니다.

     

    함수

    MySQL에서 사용할 수 있는 함수들이 몇 가지 있습니다.

    함수를 사용하면 결과 값을 새로운 컬럼으로 반환해줍니다.

    대표적인 문자열 관련 함수는 다음과 같습니다.

    문자열 관련 함수

    대표적인 숫자 관련 함수는 다음과 같습니다.

    숫자 관련 함수

    대표적인 날짜형 데이터 관련 함수는 다음과 같습니다.

    날짜 관련 함수

    이런 함수들을 활용한 예시들을 좀 살펴볼까요?

    앞으로는 w3schools.com에서 제공하는 MySQL 에디터에 있는 테이블들을 활용한 예시를 들어보겠습니다.

    직접 실습해보고 싶으신 분들은 아래 링크에서 해보시면 좋을 것 같아요!

    https://www.w3schools.com/mysql/trymysql.asp?filename=trysql_select_all

     

    MySQL Tryit Editor v1.0

    WebSQL stores a Database locally, on the user's computer. Each user gets their own Database object. WebSQL is supported in Chrome, Safari, and Opera. If you use another browser you will still be able to use our Try SQL Editor, but a different version, usin

    www.w3schools.com

    예를 들어, 직원의 이름을 하나의 컬럼으로 만들고 싶다면 다음과 같이 작성합니다.

    SELECT CONCAT(FirstName, ' ', LastName)
    FROM Employees;

    주문 번호 별 평균 주문 수량을 올림해서 정수로 반환하고 싶다면 다음과 같이 작성합니다.

    SELECT OrderID, CEIL(AVG(Quantity))
    FROM OrderDetails
    GROUP BY OrderID;

    주문 일자 정보를 YYYY/MM/DD 형태로 반환하고 싶다면 다음과 같이 작성합니다.

    SELECT DATE_FORMAT(OrderDate, '%Y/%m/%d')
    FROM Orders;

     

    쿼리 실행 순서

    이번 포스팅의 마지막으로 SQL 쿼리의 실행 순서에 대해 공부해보겠습니다.

    SQL 쿼리는 작성 순서에 따라 실행되는 게 아니라 실행되는 순서가 따로 있는데요.

    SQL 작성 순서

    SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY 이지만

    SQL 실행 순서

    FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY 입니다.

     

    ORDER BY 함수가 가장 마지막에 실행되기 때문에

    SELECT에서 AS를 사용해 컬럼에 별명을 설정했다면

    해당 별명은 ORDER BY에서는 사용할 수 없다는 특징이 있습니다.


    이렇게 오늘로 데이터 가져오기 포스팅은 끝이 났습니다!

    이제 가장 어려울 수 있는 IF, CASE와 JOIN을 남겨 두고 있는데요.

    다음 주에 해당 내용을 같이 공부해봐요 😊

    '데이터분석 > SQL' 카테고리의 다른 글

    [SQL] MySQL - 데이터 만지기  (2) 2023.03.17
    [SQL] MySQL - 데이터 가져오기 (1)  (0) 2023.03.09
    [SQL] MySQL - CREATE, ALTER, DROP, DELETE  (2) 2023.03.07

    댓글

Designed by Tistory.