studyLog

SQL SQLite 집계함수 Having 그룹 데이터베이스 DATABASE 데이터관리

OPENLUNCH 2024. 6. 19. 00:16
반응형

*국문

Having

GROUP BY를 사용하여 데이터를 그룹화할 수 있을 뿐만 아니라 SQL에서는 어떤 그룹을 포함하고 어떤 그룹을 제외할지 필터링할 수 있습니다.
예를 들어, 서로 다른 장르의 영화가 각 연도마다 얼마나 많이 제작되었는지 알고 싶지만, 최소 10편 이상의 영화가 있는 연도와 장르만 관심이 있습니다.
여기서는 WHERE를 사용할 수 없습니다. 왜냐하면 행을 필터링하는 것이 아니라 그룹을 필터링하고 싶기 때문입니다.
이것이 HAVING이 필요한 이유입니다.


HAVING.은 WHERE.과 매우 유사합니다. 사실, 지금까지 배운 모든 유형의 WHERE 절을 HAVING과 함께 사용할 수 있습니다.
다음과 같이 문제를 해결할 수 있습니다:

SELECT year,
genre,
COUNT(name)
FROM movies
GROUP BY 1, 2
HAVING COUNT(name) > 10;

 


쿼리 결과를 개별 행의 값에 따라 제한하려면 WHERE.을 사용합니다.
쿼리 결과를 집계 속성에 따라 제한하려면 HAVING을 사용합니다.
HAVING 문은 항상 GROUP BY 뒤에 오지만  ORDER BY 및 LIMIT. 앞에 와야 합니다.


다음과 같은 쿼리가 있다고 가정해 봅시다:

SELECT price,
ROUND(AVG(downloads)),
COUNT(*)
FROM fake_apps
GROUP BY price;


이는 각 가격대에서 평균 다운로드(반올림)와 앱의 수를 반환합니다.
그러나 특정 가격대에는 많은 앱이 없으므로 해당 가격대의 평균 다운로드는 의미가 적습니다.
HAVING 절을 추가하여 10개 이상의 앱이 있는 가격대로 쿼리를 제한합니다.
각 가격대에서의 총 앱 수는  COUNT(*)에 의해 주어집니다.


SELECT price,
ROUND(AVG(downloads)),
COUNT(*)
FROM fake_apps
GROUP BY price
HAVING COUNT(*) > 10;

COUNT(*) > 10이 조건입니다.
이 조건에는 집계 함수가 포함되어 있으므로 WHERE. 대신 HAVING을 사용해야 합니다.

​끝!

반응형