IT/SQL
[SQL 고득점 Kit] GROUP BY
머밍
2024. 7. 2. 18:56
LEVEL 2
자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기
- CAR_RENTAL_COMPANY_CAR 테이블에서 '통풍시트', '열선시트', '가죽시트' 중 하나 이상의 옵션이 포함된 자동차가 자동차 종류 별로 몇 대인지 출력하는 SQL문
-> 여러 조건을 or로 검사
SELECT CAR_TYPE,COUNT(*) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%통풍시트%'
OR OPTIONS LIKE '%열선시트%'
OR OPTIONS LIKE '%가죽시트%'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE
성분으로 구분한 아이스크림 총 주문량
- 상반기 동안 각 아이스크림 성분 타입과 성분 타입에 대한 아이스크림의 총주문량을 총주문량이 작은 순서대로 조회하는 SQL
SELECT INGREDIENT_TYPE, SUM(TOTAL_ORDER) AS TOTAL_ORDER
FROM FIRST_HALF f, ICECREAM_INFO i
WHERE f.FLAVOR = i.FLAVOR
GROUP BY INGREDIENT_TYPE
ORDER BY TOTAL_ORDER;
진료과별 총 예약 횟수 출력하기
- APPOINTMENT 테이블에서 2022년 5월에 예약한 환자 수를 진료과코드 별로 조회하는 SQL문을 작성
-> 날짜 형식을 지정 안할거면 like 사용해서 풀기~
SELECT MCDP_CD AS "진료과코드", COUNT(APNT_NO) AS "5월예약건수"
FROM APPOINTMENT
WHERE APNT_YMD LIKE '2022-05%'
GROUP BY MCDP_CD
ORDER BY 2,1
고양이와 개는 몇 마리 있을까
- 동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문
- 이때 고양이를 개보다 먼저 조회 -> 알파벳 오름차순
SELECT ANIMAL_TYPE, COUNT(*) AS count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE
동명 동물 수 찾기
- 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문
- 이때 결과는 이름이 없는 동물은 집계에서 제외
-> 그룹화한 결과의 조건이라 having 절에 조건 적기
SELECT NAME, COUNT(*) AS COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(*) > 1
ORDER BY NAME
입양 시각 구하기(1)
- 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아봄
- 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문
- 이때 결과는 시간대 순으로 정렬 -> 오름차순
SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) BETWEEN '09' AND '19'
GROUP BY HOUR
ORDER BY HOUR
가격대 별 상품 개수 구하기
- PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성
- 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시
-> 구간대를 계산하기가 어려워 floor함수를 찾아봄
SELECT FLOOR(PRICE/10000)*10000 AS PRICE_GROUP,
COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP
조건에 맞는 사원 정보 조회하기
- HR_DEPARTMENT, HR_EMPLOYEES, HR_GRADE 테이블에서 2022년도 한해 평가 점수가 가장 높은 사원 정보를 조회
- 2022년도 평가 점수가 가장 높은 사원들의 점수, 사번, 성명, 직책, 이메일을 조회하는 SQL문
- 2022년도의 평가 점수는 상,하반기 점수의 합을 의미
SELECT SUM(SCORE) AS SCORE,
g.EMP_NO, e.EMP_NAME,e.POSITION,e.EMAIL
FROM HR_GRADE g INNER JOIN HR_EMPLOYEES e
ON g.EMP_NO = e.EMP_NO
WHERE YEAR = 2022
GROUP BY EMP_NO
ORDER BY SCORE DESC
LIMIT 1
물고기 종류 별 잡은 수 구하기
- FISH_NAME_INFO에서 물고기의 종류 별 물고기의 이름과 잡은 수를 출력하는 SQL문
SELECT COUNT(*) AS FISH_COUNT, n.FISH_NAME
FROM FISH_INFO i INNER JOIN FISH_NAME_INFO n
ON i.FISH_TYPE = n.FISH_TYPE
GROUP BY FISH_NAME
ORDER BY FISH_COUNT DESC
월별 잡은 물고기 수 구하기
- 월별 잡은 물고기의 수와 월을 출력하는 SQL
- 월은 숫자형태 (1~12) 로 출력하며 9 이하의 숫자는 두 자리로 출력하지 않음
- 잡은 물고기가 없는 월은 출력하지 않음
SELECT COUNT(*) AS FISH_COUNT, MONTH(TIME) AS MONTH
FROM FISH_INFO
GROUP BY MONTH
ORDER BY 2
노선별 평균 역 사이 거리 조회하기
- SUBWAY_DISTANCE 테이블에서 노선별로 노선, 총 누계 거리, 평균 역 사이 거리를 노선별로 조회하는 SQL문
- 총 누계거리는 테이블 내 존재하는 역들의 역 사이 거리의 총 합
- 총 누계 거리와 평균 역 사이 거리의 컬럼명은 각각 TOTAL_DISTANCE, AVERAGE_DISTANCE
- 총 누계거리는 소수 둘째자리에서, 평균 역 사이 거리는 소수 셋째 자리에서 반올림 한 뒤 단위(km)를 함께 출력
ROUND함수 사용 -> 반올림
CONCAT 함수 사용 -> km붙여서 출력
SELECT ROUTE,
CONCAT(ROUND(SUM(D_BETWEEN_DIST),1),"km") AS TOTAL_DISTANCE,
CONCAT(ROUND(AVG(D_BETWEEN_DIST),2),"km") AS AVERAGE_DISTANCE
FROM SUBWAY_DISTANCE
GROUP BY ROUTE
ORDER BY SUM(D_BETWEEN_DIST) DESC;