order by 정렬 문의
456
작성한 질문수 74
안녕하세요 강사님
group by + distinct를 비교해보다
이유는 모르겠지만 위에 distinct를 넣은 것은
day 컬럼이 자동으로 정렬이 되었고
아래의 distinct를 넣지 않은 컬럼은 정렬 되지 않았습니다 아래도 역시 distinct 를 넣으니 자동 오름차순이 되었습니다 (count( DISTINCT oi.order_id))
혹시 그 이유가 궁금합니다
또, order by 처리 시 쿼리 속도가 느려진다는 말이 있는데 이런식으로 order by 를 넣지 않고 자동 정렬 되는 것이 있다면 쿼리 속도 향상에 도움이 될까요?
쿼리문
자동 정렬
SELECT date_part( 'day', o.order_date) AS DAY
, sum(amount) AS sum_amount
, count(DISTINCT o.order_id) AS daily_ord_cut
FROM orders o
, order_items oi
WHERE 1 = 1
AND o.order_id = oi.order_id
GROUP BY date_part( 'day', o.order_date)
ORDER BY 1
;
정렬 안됨
SELECT date_part( 'day', o.order_date) AS DAY
, sum(amount) AS sum_amount
, count( oi.order_id) AS daily_ord_cut
FROM orders o
, order_items oi
WHERE 1 = 1
AND o.order_id = oi.order_id
GROUP BY date_part( 'day', o.order_date);
답변 1
1
안녕하십니까,
올려주신 자동 정렬 쿼리를 보면 맨 마지막에 order by가 있습니다. 그래서 정렬이 된 것 같습니다.
SELECT date_part( 'day', o.order_date) AS DAY
, sum(amount) AS sum_amount
, count(DISTINCT o.order_id) AS daily_ord_cut
FROM orders o
, order_items oi
WHERE 1 = 1
AND o.order_id = oi.order_id
GROUP BY date_part( 'day', o.order_date)
ORDER BY 1
그런데 질문하신 대로 group by 를 이용할 경우 group by 절 컬럼값으로 자동 정렬이 될 때가 있습니다.
DBMS 초기에는 group by 를 수행하면 내부적으로 정렬을 수행해서 grouping을 적용합니다. 그래서 group by만 해도 별도의 order by 없이 group by 컬럼값으로 자동 정렬이 되었습니다.
그런데 SQL 성능을 향상 시키기 위해서 group by 를 Hash 기반으로 적용을 하게 되면서 내부 자동 정렬을 수행하지 않게 됩니다. 지금은 DBMS 내부적으로 group by를 Hash 기반으로 기본 적용합니다. 하지만 SQL이 Group by 외에도 별도의 정렬이 필요하다고 DBMS가 판단할 경우는 group by를 Hash가 아닌 자동 정렬 방식을 적용할 수 있습니다.
때문에 SQL의 유형에 따라 order by 를 사용하지 않아도 group by 만으로 group by 컬럼값으로 자동 정렬이 될 수도 있습니다.
그리고 group by 를 자동 정렬로 적용하면 상대적으로 Hash대비 group by 속도가 덜 나옵니다. 물론 group by 후에 다시 불필요하게 order by 를 수행하는 것 보다는 약간 빠를 수 있지만, 정렬에 대한 부하는 여전합니다.
감사합니다.
"주문별 고객별 연관 상품 추출 SQL로 구하기-02" 수업 질문
0
52
2
쿼리 질문있습니다!!
0
49
2
없는강의요청해도됩니까,,
0
91
2
아래와 동일한 질문에 대한 추가질문입니다
0
71
2
cnt/max로 구한 결과의 차이
0
101
2
쿼리에 대한 질문이 있습니다.
0
116
2
퍼널 질문드립니다.
0
113
1
ADSP자격증
0
283
2
특정 스키마에서 생성한 편집기의 쿼리를 판다스에 삽입하는 방법
0
161
1
백업파일 테이블 생성 오류
0
235
1
"사용자별 특정 상품 주문시 함께 가장 많이 주문된 다른 상품 추출하기"에서 조건관련..
0
162
1
Plotly을 이용해 treemap시각화시 공유사항
0
278
2
월단위 카테고리별 매출액과 주문건수 및 전체매출액 대비 비율 sql로 구하기 수업 중 질문이 있습니다.
0
250
1
with 절 질문
0
240
1
데이터 분석 SQL Fundamentals 강의 할인 문의
0
215
1
리텐션 구하는 방법 문의
0
215
1
캐글데이터 Postgresql 사용
0
356
2
mau 구할때 group by 사용안해도 count 집계함수가 왜 가능한지 모르겠습니다.
0
262
1
매출분석 1에서 partition by와 group by의 차이
0
355
1
postgres 설치 오류
0
319
1
맥 계정에서 postgres 접속 시 비밀번호 입력 실패현상
1
543
2
pandas 연계시 오류.....
0
1246
3
시각화 그래프가 안보여요
0
300
1
ntile 정규분포에 관하여 ... 향후 일을 하게 될 시
0
359
1





