๐ฐ 5์ ์ํ๋ค์ ์ด๋งค์ถ ์กฐํํ๊ธฐ – ์ฟผ๋ฆฌ ๋ถ์
SELECT FD.PRODUCT_ID, FD.PRODUCT_NAME, SUM(FD.PRICE * FO.AMOUNT) AS TOTAL_SALES
FROM FOOD_ORDER FO
JOIN FOOD_PRODUCT FD ON FO.PRODUCT_ID = FD.PRODUCT_ID
WHERE FO.PRODUCE_DATE BETWEEN '2022-05-01'
AND '2022-05-31'
GROUP BY FD.PRODUCT_ID, FD.PRODUCT_NAME
ORDER BY TOTAL_SALES DESC, FD.PRODUCT_ID ASC;
โ JOIN … ON
JOIN FOOD_PRODUCT FD ON FO.PRODUCT_ID = FD.PRODUCT_ID
- FOOD_ORDER์ ์ฃผ๋ฌธ ๋ฐ์ดํฐ์ FOOD_PRODUCT์ ๊ฐ๊ฒฉ ๋ฐ์ดํฐ๋ฅผ ์ ํ ID ๊ธฐ์ค์ผ๋ก ์ฐ๊ฒฐ
- ๊ฐ๊ฒฉ๊ณผ ์๋์ ๊ฒฐํฉํด ๋งค์ถ์ ๊ณ์ฐํ๊ธฐ ์ํด ๋ฐ๋์ ํ์
โ WHERE … BETWEEN
WHERE FO.PRODUCE_DATE BETWEEN '2022-05-01' AND '2022-05-31'
- 2022๋ 5์ ์์ฐ๋ถ๋ง ํํฐ๋ง
- BETWEEN์ผ๋ก ๋ ์ง ๋ฒ์ ์กฐ๊ฑด ์ง์
โ SUM(FD.PRICE * FO.AMOUNT)
- ๋งค์ถ ๊ณ์ฐ
- ๊ฐ๋ณ ์ฃผ๋ฌธ์ ์๋ × ๋จ๊ฐ๋ฅผ ๋ชจ๋ ๋ํด ์ ํ๋ณ ์ด๋งค์ถ(TOTAL_SALES) ์ฐ์ถ
โ GROUP BY FD.PRODUCT_ID, FD.PRODUCT_NAME
- ์ ํ๋ณ ๋งค์ถ ํฉ๊ณ ๊ณ์ฐ์ ์ํ ๊ทธ๋ฃนํ
- SELECT ์ ์ ์๋ ์ง๊ณ ๋์์ด ์๋ ์ปฌ๋ผ์ ๋ชจ๋ GROUP BY์ ํฌํจ๋์ด์ผ ํจ
๐ฝ๏ธ ์ฆ๊ฒจ์ฐพ๊ธฐ๊ฐ ๊ฐ์ฅ ๋ง์ ์๋น ์ ๋ณด ์ถ๋ ฅํ๊ธฐ – ์ฟผ๋ฆฌ ๋ถ์
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE (FOOD_TYPE, FAVORITES) IN (
SELECT FOOD_TYPE, MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE
)
ORDER BY FOOD_TYPE DESC;
โ WHERE (FOOD_TYPE, FAVORITES) IN (…)
- ๋ค์ค ์ปฌ๋ผ IN ์กฐ๊ฑด์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ (FOOD_TYPE, MAX(FAVORITES))์ ํฌํจ๋ ๋๋ง ํํฐ๋ง๋จ→ ๋์ผํ ์์ ์ข ๋ฅ์์ ์ต๋๊ฐ์ด ์ค๋ณต๋ ์๋น์ด ์ฌ๋ฟ์ด๋ฉด ๋ชจ๋ ๋ฐํ
- → ๊ฐ ์์ ์ข ๋ฅ์์ ์ฆ๊ฒจ์ฐพ๊ธฐ ์๊ฐ ์ต๋์ธ ์๋น๋ง ์ถ์ถ๋จ
- ๋จ์ผ ์ปฌ๋ผ์ด ์๋ (FOOD_TYPE, FAVORITES)์ ์์ด
โ SELECT FOOD_TYPE, MAX(FAVORITES) + GROUP BY
SELECT FOOD_TYPE, MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE
- ๊ทธ๋ฃน๋ณ ์ต๋๊ฐ ์ง๊ณ→ ๊ฒฐ๊ณผ๋ ์์ ์ข ๋ฅ๋ณ๋ก ๊ฐ์ฅ ๋์ ์ฆ๊ฒจ์ฐพ๊ธฐ ์๋ง ๋ฐํ
- ์ด ๊ฒฐ๊ณผ๋ฅผ ๋ฉ์ธ ์ฟผ๋ฆฌ์ ์กฐ๊ฑด ํํฐ์ ์ฌ์ฉํจ
- FOOD_TYPE๋ณ๋ก ๊ทธ๋ฃนํํ ํ, ๊ฐ ๊ทธ๋ฃน ๋ด์์ ์ฆ๊ฒจ์ฐพ๊ธฐ ์์ ์ต๋๊ฐ๋ง ์ถ์ถ
โ ์์
- GROUP BY + MAX๋ก ์ต๋๊ฐ ์ถ์ถ
- (A, B) IN (SELECT A, MAX(B)) ํจํด์ผ๋ก ๋ค์ค ์ปฌ๋ผ ์กฐ๊ฑด ๋น๊ต
- ์๋ธ์ฟผ๋ฆฌ ์์ด JOIN์ด๋ RANK ์์ด๋ ๊ฐ๊ฒฐํ๊ฒ ํด๊ฒฐ ๊ฐ๋ฅ
'DB > SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SQL - 20250513 (2) | 2025.05.13 |
---|---|
SQL - 20250508 (0) | 2025.05.08 |
SQL 20241005 (1) | 2024.10.05 |
SQL 20241003 (2) | 2024.10.03 |
SQL 20241002 (0) | 2024.10.02 |