⭐
WITH LENGTH AS
(SELECT IF(ISNULL(LENGTH), 10, LENGTH) AS LENGTH
FROM FISH_INFO)
SELECT ROUND(AVG(LENGTH), 2) AS AVERAGE_LENGTH
FROM LENGTH
10CM 이하의 물고기는 LENGTH가 NULL이므로, WITH
절에서 이를 10으로 대체하는 테이블을 만들어주었습니다.
그 후, 소수점 3째자리에서 반올림한 평균 치를 구하는 쿼리문을 작성했습니다.
⭐⭐
PRODUCT 테이블과 OFFLINE_SALE 테이블에서
SELECT P.PRODUCT_CODE,
SUM(P.PRICE * O.SALES_AMOUNT) AS SALES
FROM PRODUCT P JOIN OFFLINE_SALE O ON P.PRODUCT_ID = O.PRODUCT_ID
GROUP BY P.PRODUCT_CODE
ORDER BY SALES DESC, P.PRODUCT_CODE;
상품코드로 GROUP BY
한 뒤, 판매가 * 판매량의 SUM
을 구하여 매출액을 계산합니다.
⭐⭐⭐⭐⭐
USER_INFO 테이블과 ONLINE_SALE 테이블에서
WITH YEAR_21 AS
(SELECT COUNT(*) AS USER_COUNT
FROM USER_INFO
WHERE YEAR(JOINED) = '2021')
SELECT YEAR(SALES_DATE) AS YEAR,
MONTH(SALES_DATE) AS MONTH,
COUNT(DISTINCT(USER_ID)) AS PURCHASED_USERS,
ROUND(COUNT(DISTINCT(USER_ID)) / USER_COUNT, 1) AS PUCHASED_RATIO
FROM ONLINE_SALE, YEAR_21
WHERE USER_ID IN (SELECT USER_ID FROM USER_INFO WHERE YEAR(JOINED) = '2021')
GROUP BY YEAR, MONTH
ORDER BY YEAR, MONTH
이 문제의 핵심은 2021년에 가입한 전체 회원 수를 어떻게 ONLINE_SALE 테이블과 함께 표현할 수 있는가였습니다.
WITH
절을 통해 2021년에 가입한 전체 회원 수를 구합니다.
그 후, 조인 대신에 두 테이블을 이용해줍니다.
먼저, 2021년에 가입했으면서 구매 이력이 있는 회원 수를 WHERE
절에서 필터링한 후 COUNT(DISTINCT(USER_ID))
하여 구합니다.
그리고, 비율 역시 위의 식을 분자에 분모에는 WITH
절의 테이블에서 구한 총 회원 수를 넣어 구합니다.
⭐⭐
AIR_POLLUTION 테이블에서
SELECT YEAR(YM) AS YEAR,
ROUND(AVG(PM_VAL1), 2) AS 'PM10',
ROUND(AVG(PM_VAL2), 2) AS 'PM2.5'
FROM AIR_POLLUTION
WHERE LOCATION2 = '수원'
GROUP BY YEAR
ORDER BY YEAR;
수원 지역을 WHERE
절을 통해 필터링합니다.
연도별 평균치이므로, 연도로 GROUP BY
하여 AVG
를 통해 평균치를 구합니다.
⭐
FISH_INFO 테이블에서
SELECT COUNT(*) AS FISH_COUNT
FROM FISH_INFO
WHERE YEAR(TIME) = '2021'
WHERE
절에서 2021년에 잡은 물고기를 필터링하여 COUNT
합니다.