Notice
Recent Posts
Recent Comments
Link
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
31 |
Tags
- ํ๋ก๊ทธ๋๋จธ์ค
- ์ฝํ
- ํจ์
- ์ธ๋ผ์ธ๋ทฐ
- ์ปจํธ๋กค๋ฌ
- ๋ณ์
- JSP
- SQL
- like
- ํ ์ด๋ธ
- DATE_FORMAT
- ๋์
- JS
- ๋ฐฐ์ด
- order by
- JavaScript
- ๋ช ๋ น์ด
- post๋ฐฉ์
- ์๋ฐ์คํฌ๋ฆฝํธ
- Update
- ๋ฐฑํฑ
- ๋์ ํ ์ด๋ธ
- MySQL
- select
- ๋ฆฌ๋ ์ค
- optionํ๊ทธ
- Ajax
- Spring
- oracle
- ๋์ปค
Archives
- Today
- Total
bom's happy life
[SQL ์ฝํ ] ์์ธ์ ์์นํ ์๋น ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ ๋ณธ๋ฌธ
Algorithm๐/ํ๋ก๊ทธ๋๋จธ์ค
[SQL ์ฝํ ] ์์ธ์ ์์นํ ์๋น ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ
bompeach 2023. 8. 13. 15:34Q)
REST_INFO์ REST_REVIEW ํ ์ด๋ธ์์ ์์ธ์ ์์นํ ์๋น๋ค์ `์๋น ID, ์๋น ์ด๋ฆ, ์์ ์ข ๋ฅ, ์ฆ๊ฒจ์ฐพ๊ธฐ์, ์ฃผ์, ๋ฆฌ๋ทฐ ํ๊ท ์ ์๋ฅผ ์กฐํ` ํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๋ฆฌ๋ทฐ ํ๊ท ์ ์๋ ์์์ ์ธ ๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ ํด์ฃผ์๊ณ ๊ฒฐ๊ณผ๋ ํ๊ท ์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์๊ณ , ํ๊ท ์ ์๊ฐ ๊ฐ๋ค๋ฉด ์ฆ๊ฒจ์ฐพ๊ธฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
A1) INNER JOIN์ฌ์ฉ
-- MYSQL
SELECT I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS, ROUND(AVG(REVIEW_SCORE),2) AS SCORE
FROM REST_INFO I
INNER JOIN REST_REVIEW R ON I.REST_ID = R.REST_ID
WHERE I.ADDRESS LIKE '์์ธ%'
GROUP BY 1,2,3,4,5
ORDER BY SCORE DESC, I.FAVORITES DESC
-- ์์ ์ฟผ๋ฆฌ๋ฌธ ์ค๋ช
-- REST_INFO ํ
์ด๋ธ๊ณผ REST_REVIEW ํ
์ด๋ธ์ ์กฐ์ธํ์ฌ
SELECT I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS,
ROUND(AVG(REVIEW_SCORE), 2) AS SCORE
-- REST_INFO ํ
์ด๋ธ์์ ์์์ ID, ์ด๋ฆ, ์์ ์ข
๋ฅ, ์ฆ๊ฒจ์ฐพ๊ธฐ ์, ์ฃผ์๋ฅผ ์ ํํ๊ณ ,
-- ๋ฆฌ๋ทฐ ์ ์์ ํ๊ท ์ ์์์ ๋์งธ ์๋ฆฌ๊น์ง ๊ณ์ฐํ์ฌ SCORE๋ก ์ ํํฉ๋๋ค.
FROM REST_INFO I
-- REST_INFO ํ
์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
INNER JOIN REST_REVIEW R ON I.REST_ID = R.REST_ID
-- REST_INFO ํ
์ด๋ธ์ REST_ID์ REST_REVIEW ํ
์ด๋ธ์ REST_ID๋ฅผ ๊ธฐ์ค์ผ๋ก INNER JOIN์ ์ํํฉ๋๋ค.
-- ์ด๋ฅผ ํตํด ๋ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค.
WHERE I.ADDRESS LIKE '์์ธ%'
-- ์์์ ์ ์ฃผ์๊ฐ '์์ธ'๋ก ์์ํ๋ ๊ฒฝ์ฐ์ ๋ํด์๋ง ์ ํํฉ๋๋ค.
GROUP BY 1, 2, 3, 4, 5
-- ์์์ ID, ์ด๋ฆ, ์์ ์ข
๋ฅ, ์ฆ๊ฒจ์ฐพ๊ธฐ ์, ์ฃผ์์ ๋ํด ๊ทธ๋ฃนํํฉ๋๋ค.
-- ์ด๋ ์ค๋ณต๋ ์ ๋ณด๋ฅผ ํ๋์ ํ์ผ๋ก ํํํ๊ธฐ ์ํจ์
๋๋ค.
ORDER BY SCORE DESC, I.FAVORITES DESC
-- SCORE๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋, ์ฆ๊ฒจ์ฐพ๊ธฐ ์๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํฉ๋๋ค.
-- ๊ฒฐ๊ณผ๋ ํ๊ท ๋ฆฌ๋ทฐ ์ ์๊ฐ ๋์ ์์๋๋ก ์ ๋ ฌ๋๋ฉฐ, ํ๊ท ์ ์๊ฐ ๋์ผํ ๊ฒฝ์ฐ ์ฆ๊ฒจ์ฐพ๊ธฐ ์๊ฐ ๋ง์ ์์๋๋ก ์ ๋ ฌ๋ฉ๋๋ค.
A2) LEFT JOIN ์ฌ์ฉ
์ฃผ์ํ ๋ถ๋ถ
1. ์์ธ๋ก ‘์์‘ํ๋ ์ฃผ์ (LIKE “์์ธ%”)
2. ๋ฆฌ๋ทฐ๊ฐ ์์ผ๋ฉด ์กฐํํ๋ฉด ์๋๋ค. (REST_REVIEW ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก LEFT JOIN)
3. ์ ๋ ฌ ์กฐ๊ฑด ์ ๋ณด๊ธฐ
-- MYSQL
SELECT RI.REST_ID, RI.REST_NAME, RI.FOOD_TYPE, RI.FAVORITES, RI.ADDRESS, ROUND(AVG(RR.REVIEW_SCORE), 2) AS SCORE
FROM REST_REVIEW RR
LEFT JOIN REST_INFO RI
ON RR.REST_ID = RI.REST_ID
GROUP BY RR.REST_ID
HAVING RI.ADDRESS LIKE "์์ธ%"
ORDER BY SCORE DESC, RI.FAVORITES DESC