티스토리 뷰

개발냥이/SQLD

[SQL_ORACLE] GROUP BY와 HAVING

데브캣_DevCat 2023. 3. 10. 15:21

GROUP BY

  • GROUP BY는 데이터들을 원하는 그룹으로 나눌 수 있다.
  • 그룹화하기 위해 집계 함수(COUNT, MAX, MIN, SUM, AVG)와 자주 사용된다!
SELECT COUNTRY, COUNT(COUNTRY) AS COUNRY_COUNT
FROM CUSTOMERS
GROUP BY COUNTRY
ORDER BY COUNTRY
  • CUSTOMERS 테이블에서 나라별 고객의 수

 

 

HAVING

  • GROUP BY 절에 의해 생성된 결과 값 중 원하는 조건의 데이터를 분류하기 위해 사용(WHERE과 유사하지만 GROUP BY와 사용된다는 점에 차이가 있다!)
SELECT COUNTRY, COUNT(COUNTRY) AS COUNRY_COUNT
FROM CUSTOMERS
GROUP BY COUNTRY
HAVING COUNT(COUNTRY) >= 10
  • 나라별 고객의 수가 10 이상인 경우만 출력

 

 

관련 문제

자동차 평균 대여 기간 구하기_GROUP BY_HAVING, AVG, ROUND, DATE

 

📝 문제

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명: AVERAGE_DURATION) 리스트를 출력하는 SQL문을 작성해주세요. 평균 대여 기간은 소수점 두번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬해주시고, 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬해주세요.


🔍 정답

SELECT CAR_ID, ROUND(AVG(END_DATE - START_DATE + 1), 1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING AVG(END_DATE - START_DATE + 1) >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC
  • CAR_ID를 그룹화한 후(ID 같은 것들끼리 묶음), 그 중에서 평균 대여기간이 7일 이상인 자동차의 평균 대여일수를 출력한 것!
반응형

'개발냥이 > SQLD' 카테고리의 다른 글

[SQLD] 2과목 SQL 기본 및 심화 정리  (0) 2023.03.17
[SQLD] 1과목 데이터 모델링의 이해 정리  (0) 2023.03.17
[SQLD] 정규화(Nomalization)  (0) 2023.02.23
[SQLD] 관계  (0) 2023.02.06
[SQLD] 속성(Attribute)  (0) 2023.02.01
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함