- 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 |
