데이터 분석가
Published 2023. 10. 12. 13:10
SQL - 쿼리의 문법 순서 SQL
  • SQL 쿼리의 문법 순서는 FROM / WHERE / GROUP BY / HAVING / SELECT / ORDER BY 순으로 진행된다. 따라서 SELECT절에서 쓰인 Ailas는 ORDER BY절에서만 사용되거나 서브쿼리를 활용하여 사용되어야 한다. 이 차이를 예제를 통해 확인해 보겠다.

교재 구매

  • 아래 교재내용을 토대로 진행해보겠습니다.
  • 기본 DB설정은 교재의 내용을 참고하시기 바랍니다.

https://www.yes24.com/Product/Goods/86544423

 

SQL로 맛보는 데이터 전처리 분석 - 예스24

SQL을 이용하여 현업에서 자주 사용되는 KPI 지표를 직접 추출해본다데이터 분석을 하기 위해서는 데이터베이스에 존재하는 데이터를 직접 추출할 수 있어야 한다. SQL은 우리가 데이터베이스에

www.yes24.com

예제

  • 교재 6장의 내용을 토대로 한다. 아래 코드는 제품별로 재주문된 건수를 총합하여 나타낸 코드이다.
use instacart;

select
    product_id
    , sum(reordered) as 합계
from order_products__prior
group by 1;
  • 해당 코드에서 합계가 10보다 큰 경우의 product_id만을 SELECT 하고 싶다면 어떻게 해야할까?
  • 단순하게 생각한다면 아래와 같이 WHERE 절을 추가하여 SELECT 하려고 할 수 있지만, 아래 코드는 오류를 일으킨다. 이는 SQL의 쿼리 순서 상 WHERE절이 SELECT절보다 먼저 확인되기 때문에 Alias로 변경된 합계를 인식할 수 없기 때문이다.
select
    product_id
    , sum(reordered) as 합계
from order_products__prior
where 합계 >= 10
group by 1;
  • 이를 해결하기 위해 서브쿼리를 활용해보겠습니다.
select product_id
from(
    select
        product_id
            , sum(reordered) as 합계
        from order_products__prior
        group by 1
) a
where 합계 >= 10;

Chat gpt를 활용한 코드 설명

  • 최종 코드에 대한 코드 설명을 적어보겠습니다.
  • 이 MySQL 쿼리는 각 product_id에 대해 재정렬된 열의 합계가 10 이상인 order_products__prior라는 테이블에서 product_id 값을 검색하도록 설계되었습니다.
  • 서브 쿼리
    • order_products__prior 테이블에서 product_id 열을 선택합니다.
    • SUM 함수를 사용하여 각 고유한 product_id에 대해 재주문된 열의 합계를 계산합니다.
    • 또한 SUM 함수의 결과에 별칭 합계(한국어로 "합계" 또는 "합계"를 의미)를 할당합니다.
    • GROUP BY 1 절은 첫 번째 열인 product_id를 기준으로 결과를 그룹화합니다. 즉, 쿼리에서 각 고유한 product_id에 대해 재주문된 합계를 계산합니다.
  • 외부 쿼리
    • 서브 쿼리 결과에서 product_id 값을 검색하는 간단한 select 문입니다.
    • 여기에는 결과를 필터링하여 합계(합계라고 별칭)가 10보다 큰 행만 선택하는 WHERE 절이 포함됩니다.

'SQL' 카테고리의 다른 글

SQL - 코호트 분석, RFM  (0) 2023.10.12
SQL - Retention Rate, Churn Rate  (0) 2023.10.06
SQL-데이터 조작어  (0) 2023.10.05
SQL-데이터 정의어  (0) 2023.10.05
profile

데이터 분석가

@이꾹꾹

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!