๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/293261
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
์ฝ๋
with rank_info as (
select id, fish_type, length,
rank() over (partition by fish_type order by length desc) as ranking
from fish_info
)
select r.id, n.fish_name, length
from rank_info r
join fish_name_info n
on r.fish_type = n.fish_type
where r.ranking = 1
order by 1 asc
rank()๋ฅผ ์ฌ์ฉํ ๋ต์
select f.id, n.fish_name, f.length
from fish_info f
join fish_name_info n
on f.fish_type = n.fish_type
where (f.fish_type, f.length) in
(select fish_type, max(length)
from fish_info
group by fish_type)
order by 1 asc
์ด๋ ๊ฒ๋ ํ ์ ์๋๋ฐ ์์ ์ฝ๋๊ฐ ์ข ๋ ์ง๊ด์ ์ผ๋ก ์ดํด๊ฐ ๋ผ์ ์์ ์ฝ๋๋ฅผ ์ ํธํ๋ค.
ํต์ฌ ์์ง
1. group by ๊ท์น ์ดํดํ๊ธฐ
select fish_type, id, max(length)
from fish_info
group by fish_type
์ฒ์์๋ ์ด๋ฐ ์์ผ๋ก ์ฝ๋๋ฅผ ์งฐ๋ค.
๊ทธ๋ฌ๋, group by์ ์ ์ฌ์ฉํ ๋, select์ ์ ํ๋ ๋ชจ๋ ์ปฌ๋ผ์ ์ง๊ณํจ์ (max, sum, count)๋ก ๋ฌถ์ด๊ฑฐ๋ group by์ ์ ํฌํจ๋์ด์ผ ํ๋ค.
๋ฐ๋ผ์, ์ด ์ฟผ๋ฆฌ์์๋ ์ด๋ค id๋ฅผ ๊ฐ์ ธ์ฌ์ง ๋ชฐ๋ผ ์๋ฌ๊ฐ ๋๊ฒ ๋๋ค.
๊ฒฐ๊ตญ, ์ต๋ ๊ธธ์ด๋ฅผ ๊ฐ์ง ๋ฌผ๊ณ ๊ธฐ ์ข ๋ฅ์ id๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด์๋ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ๋๋ค.
2. where์ ์ ๋ ์ปฌ๋ผ์ ํ ์์ผ๋ก ๋น๊ตํ๊ธฐ
where (a, b) in (๋ ์ปฌ๋ผ์ ๋ฐํํ๋ ์๋ธ์ฟผ๋ฆฌ)
: ์ด๋ฐ ์์ผ๋ก ํ๋ฉด ๋ ์ปฌ๋ผ์ ํ ์์ผ๋ก ๊ฐ์ ธ์์ ์ผ์นํ๋ ํ์ ๊ฐ์ ์ถ์ถํ ์ ์๋ค.
3. rank() over () ์ฌ์ฉํ๊ธฐ
์ต๋๊ฐ์ ๊ตฌํ ๋ rank(), dense_rank(), row_number()๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ์ฅ ์ง๊ด์ ์ด์ง ์๋์ถ๋ค.
rank() - ๊ฐ์ ๊ฐ์ ๊ฐ์ ์์๋ก, 1 1 3
dense_rank() - ๊ฐ์ ๊ฐ์ ๊ฐ์ ์์๋ก, 1 1 2
row_number() - ๊ฐ์ ์์ ์์ด 1 2 3
rank๋ก ์์๋ฅผ ๋งค๊ฒผ์ ๋ ์ค๋ฆ์ฐจ์์ผ๋ก ๋ฑ์๋ฅผ ๋งค๊ฒจ์ค์ order by ๋ค์ desc๋ฅผ ์ถ๊ฐํด์คฌ๋ค.
'Tools > - SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [SQL] leetcode | 185. Department Top Three Salaries (0) | 2025.01.19 |
|---|---|
| [SQL] leetcode | 262. Trips and users ์์ ํ์ด (0) | 2025.01.19 |
| [SQL] solvesql ์ธ์ ์ฌ์ ์ํ๊ธฐ | lag () over (), ์๊ฐ ์ฐจ์ด ๊ตฌํ๊ธฐ (0) | 2025.01.16 |
| [SQL] solvesql ์นดํ ๊ณ ๋ฆฌ ๋ณ ๋งค์ถ ๋น์จ | sum() over () (0) | 2025.01.16 |
| [SQL] solvesql ๊ฐ๊ตฌ ํ๋งค์ ๋น์ค์ด ๋์๋ ๋ ์ฐพ๊ธฐ (0) | 2025.01.16 |