โ๏ธ ๋ฌผ๊ณ ๊ธฐ ์ข ๋ฅ ๋ณ ๋์ด ์ฐพ๊ธฐ
: fish_type ๋ณ๋ก ์ต๋ ๊ธธ์ด๋ฅผ ๊ฐ์ง๋ ๋ ์ฝ๋๋ฅผ ๊ฒ์
1) ์๋ธ์ฟผ๋ฆฌ๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
SELECT ID,
(SELECT FISH_NAME FROM FISH_NAME_INFO WHERE FISH_TYPE = a.FISH_TYPE) AS FISH_NAME, -- ๋๋ฒ์งธ ํ
์ด๋ธ ์๋ธ์ฟผ๋ฆฌ
LENGTH
FROM FISH_INFO a
WHERE LENGTH IN (SELECT MAX(LENGTH) FROM FISH_INFO GROUP BY FISH_TYPE) -- self ํ
์ด๋ธ ์๋ธ์ฟผ๋ฆฌ
ORDER BY ID
where ์ ์์ fish_type ๋ณ๋ก max(length)์ ์๋ธ์ฟผ๋ฆฌ๋ก ์ถ์ถํ์ฌ
์ฐ์ฐ์ in์ผ๋ก ์ต๋๊ฐ์ ์ถฉ์กฑํ๋ length์ ๊ฒ์ํ๋๋ก ํ์๋ค.
2) ์กฐ์ธ๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
SELECT a.ID, c.FISH_NAME, a.LENGTH
FROM FISH_INFO a
INNER JOIN (SELECT FISH_TYPE, MAX(LENGTH) AS LENGTH
FROM FISH_INFO
GROUP BY FISH_TYPE) b -- self join
ON a.FISH_TYPE = b.FISH_TYPE AND a.LENGTH = b.LENGTH -- on์ผ๋ก ์กฐ๊ฑด ์ฃผ๊ธฐ
JOIN FISH_NAME_INFO c ON a.FISH_TYPE = c.FISH_TYPE -- ๋๋ฒ์งธ ํ
์ด๋ธ ์กฐ์ธ
ORDER BY a.ID
fish type ๋ณ ์ต๋ ๊ธธ์ด๋ฅผ ์ถ์ถํ ํ ์ด๋ธ(๊ฒ์ํ๊ณ ์ ํ๋ ๋ฐ์ดํฐ ๊ฐ)์ ๋ด๋ถ์กฐ์ธํ์ฌ
self join table์ ์กฐ๊ฑด์ฒ๋ผ ์ฌ์ฉํ์๋ค.
โ๏ธ ์กฐ๊ฑด์ ๋ง๋ ์ฌ์ฉ์ ์ ๋ณด ์กฐํํ๊ธฐ
: used_goods_board ํ ์ด๋ธ์์ ๋ ์ฝ๋๋ฅผ 3๊ฐ ์ด์ ๋ฑ๋กํ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์กฐํ
1) Where์ ์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉ
SELECT USER_ID, NICKNAME,
CONCAT(CITY, " ", STREET_ADDRESS1, " ", STREET_ADDRESS2) AS ์ ์ฒด์ฃผ์,
CONCAT(SUBSTRING(TLNO, 1, 3), "-", SUBSTRING(TLNO, 4, 4), "-", SUBSTRING(TLNO, 8, 4)) AS ์ ํ๋ฒํธ
FROM USED_GOODS_USER
WHERE USER_ID IN (SELECT WRITER_ID
FROM USED_GOODS_BOARD
GROUP BY WRITER_ID
HAVING COUNT(*) >=3)
ORDER BY USER_ID DESC;
substring(์ปฌ๋ผ, ์์ ์์น, ๊ฐ์)
: ๋ฌธ์์ด์ ์ฌ๋ผ์ด์ฑํ๋ ๋ฌธ๋ฒ. ์ฐธ๊ณ ๋ก ์์์์น๋ 1๋ถํฐ ์์ํ๋ค
writer_id ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํํ์์ ๋
having์ผ๋ก ๋ ์ฝ๋ ๊ฐ์๊ฐ 3์ด์์ธ writer_id๋ฅผ ๊ฒ์ํ๋ ์๋ธ์ฟผ๋ฆฌ
2) Join ์ฌ์ฉ
SELECT U.USER_ID, U.NICKNAME,
CONCAT(U.CITY, " ", U.STREET_ADDRESS1, " ", U.STREET_ADDRESS2) AS ์ ์ฒด์ฃผ์,
CONCAT(SUBSTRING(U.TLNO, 1, 3), "-", SUBSTRING(U.TLNO, 4, 4), "-", SUBSTRING(U.TLNO, 8, 4)) AS ์ ํ๋ฒํธ
FROM USED_GOODS_USER U
JOIN USED_GOODS_BOARD B
ON U.USER_ID = B.WRITER_ID
GROUP BY U.USER_ID
HAVING COUNT(*) >= 3
ORDER BY U.USER_ID DESC;
๋ ํ ์ด๋ธ์ ์กฐ์ธํ์ฌ
3๊ฐ ์ด์์ ๋ ์ฝ๋๊ฐ ๋ฑ๋ก๋์ด์๋ user_id ๊ฒ์
๐ Join๊ณผ Subquery์ ์ฐจ์ด
์กฐ์ธ์ ๋ ํ ์ด๋ธ ์ด์์ ํ๋์ ํ ์ด๋ธ๋ก ํฉ์น๊ณ
์๋ธ์ฟผ๋ฆฌ๋ ๋ฉ์ธ ์ฟผ๋ฆฌ ๋ด์์ ํ๋ฒ์ ๊ฒ์์ผ๋ก ํ ์ด๋ธ์ ์ถ์ถํ๋ค
๊ฒ์ ๊ฒฐ๊ณผ, ์๋ธ์ฟผ๋ฆฌ๋ณด๋ค๋ ์กฐ์ธ์ ์ฌ์ฉํ๋ ๊ฑฐ์ด ์ฑ๋ฅ์ด ์ข๋ค๊ณ ํ๋ค.
์๋ธ์ฟผ๋ฆฌ ๊ฐ์ ๊ฒฝ์ฐ, ๋ฉ์ธํ ์ด๋ธ์ ๋ ์ฝ๋ ์ ๋งํผ ์๋ธ ์ฟผ๋ฆฌ๋ฅผ ์ํํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์๋ ์๋ค.
๋ํ ๋ฐ์ดํฐ์๊ณผ ์ธ๋ฑ์ค์ ์ ๋ฎค์ ๋ฐ๋ผ ์ํฉ์ด ๋ฌ๋ผ์ง๋ค.
ํนํ, ์ธ๋ฑ์ค๊ฐ ์๋ค๋ฉด full scan์ ํด์ผ ํ ๊ฒ์ด๊ณ ์๊ฐ์ด ๋ ์์๋ ๊ฒ์ด๋ค.
'Tools > - SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [SQL] solvesql ๊ฐ๊ตฌ ํ๋งค์ ๋น์ค์ด ๋์๋ ๋ ์ฐพ๊ธฐ (0) | 2025.01.16 |
|---|---|
| [MySQL] Case๋ฌธ | ๋ฌธ๋ฒ๊ณผ ๊ฐ๋จํ ์์ ์ดํด๋ณด๊ธฐ (0) | 2024.04.07 |
| [SQL] ์ฐ์ฐ์ | IN, & (AND ๋นํธ ์ฐ์ฐ์) | ํ๋ก๊ทธ๋๋จธ์ค ์์ (0) | 2024.03.12 |
| [MySQL] ์กฐ์ธ | INNER JOIN, OUTER JOIN (0) | 2024.03.12 |
| [MySQL] 7์ฅ ์คํ ์ด๋ ํจ์ | ์ปค์ | ํธ๋ฆฌ๊ฑฐ (0) | 2024.03.10 |