본문 바로가기
MySql

MySQL 집계 함수는 ORDER BY 절에서 무엇을 할 수 있습니까?

by 베이스 공부 2021. 1. 22.
반응형

식물 테이블이 있다고 가정 해 보겠습니다.

id fruit
1  banana
2  apple
3  orange

할 수 있어요

SELECT * FROM plant ORDER BY id;
SELECT * FROM plant ORDER BY fruit DESC;

이것은 명백한 일을합니다.

그러나 나는 이것에 물렸다. 이것은 무엇을 하는가?

SELECT * FROM plant ORDER BY SUM(id);
SELECT * FROM plant ORDER BY COUNT(fruit);
SELECT * FROM plant ORDER BY COUNT(*);
SELECT * FROM plant ORDER BY SUM(1) DESC;

이 모든 것은 첫 번째 행 (id = 1) 만 반환합니다.

 

해결 방법

 

표의 열 대신 집계 값을 실제로 선택하면 결과가 더 명확 해집니다.

SELECT SUM(id) FROM plant ORDER BY SUM(id)

이것은 모든 ID의 합계를 반환합니다. 집계는 항상 하나의 행만 생성하므로 순서를 지정할 필요가 없기 때문에 이것은 물론 쓸모없는 예입니다. 쿼리에서 행 qith 열을 얻는 이유는 MySQL이 무작위가 아니라 결정적이지 않은 하나의 행을 선택하기 때문입니다. 귀하의 경우 테이블의 첫 번째 열이지만 다른 열은 스토리지 엔진, 기본 키 등에 따라 다른 행을 얻을 수 있습니다. 따라서 ORDER BY 절에서만 집계는 그다지 유용하지 않습니다.

일반적으로 원하는 작업은 특정 필드별로 그룹화 한 다음 어떤 방식 으로든 결과 집합을 정렬하는 것입니다.

SELECT fruit, COUNT(*)
FROM plant
GROUP BY fruit
ORDER BY COUNT(*)

이제 더 흥미로운 쿼리입니다! 그러면 해당 과일의 총 개수와 함께 각 과일에 대해 하나의 행이 제공됩니다. 사과를 더 추가하면 주문이 실제로 이해되기 시작합니다.

완전한 표 :

+----+--------+
| id | fruit  |
+----+--------+
|  1 | banana |
|  2 | apple  |
|  3 | orange |
|  4 | apple  |
|  5 | apple  |
|  6 | banana |
+----+--------+

위의 쿼리 :

+--------+----------+
| fruit  | COUNT(*) |
+--------+----------+
| orange |        1 |
| banana |        2 |
| apple  |        3 |
+--------+----------+

 

참조 페이지 https://stackoverflow.com/questions/13099282

 

 

반응형

댓글