์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ๋ฐ์ดํฐ๋ถ์
- ํ๋ก๊ทธ๋๋จธ์ค
- ์บ๊ธ
- ์ฝ๋์นดํ
- sqld
- TIL
- ์ฝ๋ฉ
- ์๋์ฐ ํจ์
- ๋ ํ
- ํ์ด์ฌ
- ๋ง์ผํ
- ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ
- sql
- ๋ฐ์ดํฐ ๋ถ์
- ๋จธ์ ๋ฌ๋
- Today
- Total
SQL & Python Study
[D+2] ์์ ๋ณด๋ค ์ฌ์ด SQL(2) - ์ฐ์ฐ, ๋ฐ์ดํฐ ์ ๋ ฌ, ๊ทธ๋ฃนํ (GROUP BY, ORDER BY) ๋ณธ๋ฌธ
[D+2] ์์ ๋ณด๋ค ์ฌ์ด SQL(2) - ์ฐ์ฐ, ๋ฐ์ดํฐ ์ ๋ ฌ, ๊ทธ๋ฃนํ (GROUP BY, ORDER BY)
๊น์ฎ์ 2024. 4. 16. 17:29
โ๏ธ STUDY IDEX
1. SQL ์ฐ์ฐ์ (SUM, AVERAGE, COUNT, MIN, MAX)
2. ๋ฐ์ดํฐ์ ๊ฐ์์ ๊ฐ ๊ตฌํ๊ธฐ (COUNT, DISTINCT)
3. ๋ฒ์ฃผ๋ณ๋ก ์ฐ์ฐํ๊ธฐ (GROUP BY)
4. ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ ๋ ฌํ๊ธฐ (ORDER BY)
5. SQL์ ๊ตฌ์กฐ (์ฟผ๋ฆฌ๋ฅผ ์ง๊ธฐ ์ ์ ์ด๋ป๊ฒ ํ๋ฆ์ ์ ๋ฆฌํด์ผ ํ๋์ง)
1. SQL ์ฐ์ฐ์ (SUM, AVERAGE, COUNT, MIN, MAX)
์์ ์์ ๋ง์ด ์ฌ์ฉํ๋ ์ซ์ ์ฐ์ฐ, SQL์์๋ ๊ทธ๋๋ก ๊ฐ๋ฅํ๋๋ผ๊ณ ์.
์๋ ์ฐ์ฐ ํจ์ ํต์ฌ๋ง ํ๋ก ๋ฑ ์ ๋ฆฌํด ๋๋ ค์.
๋น์ฐํ๊ฒ๋ ๋ฐ์ดํฐ๊ฐ ์ซ์๊ฐ ์๋ ๋ฌธ์์ธ ๊ฒฝ์ฐ์ ์ค๋ฅ๊ฐ ๋๋ ์ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
์ฐ์ฐ์ ํน์ ํจ์ | ์๋ฏธ |
+ | ๋ํ๊ธฐ |
- | ๋นผ๊ธฐ |
* | ๊ณฑํ๊ธฐ |
/ | ๋๋๊ธฐ |
SUM(์ปฌ๋ผ) | ํฉ๊ณ |
AVG(์ปฌ๋ผ) | ํ๊ท |
MAX(์ปฌ๋ผ) | ์ต๋๊ฐ ๊ตฌํ๊ธฐ |
MIN(์ปฌ๋ผ) | ์ต์๊ฐ ๊ตฌํ๊ธฐ |
2. ๋ฐ์ดํฐ์ ๊ฐ์์ ๊ฐ ๊ตฌํ๊ธฐ (COUNT, DISTINCT)
ํ์ฌ ํ ์ด๋ธ์ด ๋ช ๊ฐ์ ๋ฐ์ดํฐ์ ๊ฐ์ ๊ฐ๊ณ ์๋์ง๋ฅผ ๊ตฌํ ์ ์๋ ํจ์๋ฅผ ์๋ ค๋๋ฆด๊ฒ์.
์ ๊ธฐํ ๊ฒ์ ๋ฐ์ดํฐ์ ๊ฐ์ ๋ค๋ฅด๊ฒ ๊ตฌ๋ถํ๋ค๋ ๊ฒ์ธ๋ฐ์.
๋ฐ์ดํฐ์ ๊ฐฏ์๋ ๋ง ๊ทธ๋๋ก ํ ์ด๋ธ์ ๋ช ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋์ง(์ค๋ณต ๊ณ์ฐX) ์ด๊ณ ,
๊ฐ์ ๊ฐฏ์๋ ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ด๋ฃจ๋ ๊ฐ์ ์ด์ผ๊ธฐํ๋ ๊ฒ์ด์์.
์ฌ์ค ์ดํดํ๊ธฐ ์ฌ์ด ๋ด์ฉ์ผ ์ ๋ ์์ง๋ง, ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ํท๊ฐ๋ ค์ ์์ฑํด ๋ดค์ด์!
ex) ๋ฐ์ดํฐ์ ๊ฐ์ ์ฐจ์ด ์ดํดํ๊ธฐ
- ๋ฐ์ดํฐ ๊ฐ์ : ์ฃผ๋ฌธ ํ ์ด๋ธ์ ์ ์ฒด ์ฃผ๋ฌธ์ ๊ฑด์ COUNT ( ์นผ๋ผ)
- ๊ฐ์ ๊ฐ์ : ์ฃผ๋ฌธ์ ํ ๊ณ ๊ฐ์ ๋ช ๋ช
์ธ์ง COUNT ( DISTINCT ์ปฌ๋ผ)
*DISTINCT๋ ์ค๋ณต๋ ๊ฐ์ ์ ๊ฑฐํ๊ณ ๊ณ ์ ํ ๊ฐ์ ๋ฐํํ๋ ํจ์๋ผ๊ณ ํด์!
# ์ฃผ๋ฌธ ๊ฑด์์ ์ฃผ๋ฌธํ ๊ณ ๊ฐ์ ์ ๊ตฌํ๊ธฐ
select count(1) as '์ฃผ๋ฌธ ์'
count(distinct customer_id) as '๊ณ ๊ฐ ์'
from food_orders
3. ๋ฒ์ฃผ๋ณ๋ก ์ฐ์ฐํ๊ธฐ (GROUP BY)
์ํ๋ ๋จ์, ์ฆ ์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ํ ๋ฒ์ ์ฐ์ฐํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด group by์ ๋๋ค.
์๋ ๋ด์ฉ์ where ์ ๋ก ํ๋์ฉ ํ๊ท ์ ๊ณ์ฐํ๋ค๋ฉด ๋๋ฌด ๋ณต์กํ๊ฒ ์ฃ ?
์ ์์ง ์ด์ง๋ผ ์ด๋ป๊ฒ ํ๋์ง๋ ์ฌ์ค ๋ชจ๋ฅด๊ฒ ์ด์. ์๋ํด๋ณด๋ ค๊ณ ํ๋ค๊ฐ SQL์ด ํ๊ฒจ์์ง๊น ํ๋ฆฐ ๋๐ ํ๋ต๋๋ค.
group by๋ผ๋ ํจ์๊ฐ ์์ด ์ ๋ง ๋คํ์ ๋๋ค. ์ ๋ ์์ง ์๊ฒ ์ด์.
# ๋ ์คํ ๋ ๋ณ ํ๊ท ์ฃผ๋ฌธ ๊ฐ๊ฒฉ ๊ตฌํ๊ธฐ
SELECT restaurant_name as "์์์ ๋ช
" ,
avg(price) "ํ๊ท ์ฃผ๋ฌธ ๊ฐ๊ฒฉ"
FROM food_orders
group by restaurant_name
์ถ๊ฐ๋ก, ์ฌ๋ฏธ์๋ ์์๋ ๊ฐ์ ธ์๋ดค์ด์.
๊ฒฐ์ ํ์ ๋ณ ๊ฐ์ฅ ์ต๊ทผ ๊ฒฐ์ ์ผ์ ์กฐํํ๋ ๊ฒ์ธ๋ฐ ์ต๊ทผ ๊ฒฐ์ ์ผ์ max(date)๋ผ๊ณ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋๋ผ๊ณ ์!
์์ง ๋ฌธ๊ณผ ๋จธ๋ฆฌ์ธ ์ ๊ฒ๋ max(date) ๋ผ๋ ํํ์ด ๋๋ฌด ์ ๋ฐํด์ ์์ํ์ง๋ง ๋ค๊ณ ์์ต๋๋ค ใ ใ
#๊ฒฐ์ ํ์
๋ณ ๊ฐ์ฅ ์ต๊ทผ ๊ฒฐ์ ์ผ ์กฐํํ๊ธฐ
SELECT pay_type ,
max(date) '์ต๊ทผ ๊ฒฐ์ ์ผ'
FROM payments
GROUP BY pay_type
4. ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ ๋ ฌํ๊ธฐ (ORDER BY)
๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฅ ๊ทธ๋๋ก ์ถ์ถํ๊ธฐ๋ง ํ๋ฉด ๊ฐ๊ณตํ๊ฑฐ๋ ๋ฐ์ดํฐ์ ํ๋ฆ์ ์ดํดํ๊ธฐ ์ด๋ ต๊ฒ ์ฃ .
๊ฒฐ๊ณผ ๊ฐ์ ์ค๋ฆ์ฐจ์ ํน์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํด ์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก order by ์ ๋๋ค.
์ข ๋ฅ | ๊ตฌ๋ฌธ | ์์ |
์ค๋ฆ์ฐจ์ | ์๋ต ๋๋ asc | order by ์ปฌ๋ผ๋ช |
๋ด๋ฆผ์ฐจ์ | desc | order by ์ปฌ๋ผ๋ช desc |
5. SQL์ ๊ตฌ์กฐ (์ฟผ๋ฆฌ๋ฅผ ์ง๊ธฐ ์ ์ ์ด๋ป๊ฒ ํ๋ฆ์ ์ ๋ฆฌํด์ผ ํ๋์ง)
๋ง์ง๋ง์ผ๋ก 1, 2ํธ์์ ๊ณต๋ถํ๋ SQL์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ๋ผ๋ ๊ตฌ์กฐ๋ผ์ ์ ๋๋ก ์๊ณ ๊ฐ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
์ค์ต ํ์ด๋ ๋ชจ๋ ์ด ์์๋๋ก ์ด๋ค ํ ์ด๋ธ์์, ์ด๋ค ์์์ ์กฐํํ๋์ง ์ ๋ฆฌ ๋จผ์ ํ๋ฉด์ ์งํ๋๊ฑฐ๋ ์!
select
from
where
group by
order by
์ค๋์ ๊ณต๋ถ๋ ์ฌ๊ธฐ๊น์ง์ ๋๋ค.
์ ๊ฐ ์ค๋ ์คํฐ๋๋ฅผ ํ๋ฉด์ ์๊ฒ ๋ ๊ฒ์ ํ ๋ด์์ ์ ์ ๊ฐ์ ์ฃผ์ฐจ๊ฐ ์ ์ผ ๋ฆ๋ค๋ ๊ฑฐ์์ ใ ใ
๊ธฐ์ด ๊ฐ์ ๋ช ๊ฐ ์๊ฐํ๋ค๊ณ ์ฌ๋ฏธ์๋ค๋ฉฐ ์์ฃผํ๊ธฐ๋ณด๋ค,
์๋ก์ด ๋ถ์ผ์ ์ ๋๋ก ๊น์ด ๋ค์ด๊ฐ๊ธฐ ์ํด ๋ ๋ง์ ๋ ธ๋ ฅ์ด ํ์ํ๊ฒ ๋ค๋ ๊ฒ์ ๊ฐํ๊ฒ ๋๊ผ์ต๋๋ค.
๊ทธ๋์ ๋๊ตฐ๊ฐ ๋ชจ๋ฅด๋ ๊ฒ์ด ์์ ๋ ์ ๊ฐ ๊ฐ๋ฅด์ณ์ค ์ ์๋๋ก ์ด๋ฒ์ฃผ์ ์ผ๋ฅธ ๊ธฐ์ด ๊ฐ์๋ฅผ ๋ค ๋ผ์ผ๊ฒ ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
์๋ก์ด ๊ฒ์ ํ๋ค๋ ๊ฒ์ ์ค๋ ๊ธฐ๋ ํ์ง๋ง, ๋ฌด์ธ๊ฐ๋ฅผ ์ด๋ฃจ๊ณ ์ด๋ค ๊ฒฝ์ง์ ์ฌ๋ผ๊ฐ๊ธฐ๋ ์ฝ์ง ์์ ๊ฒ ๊ฐ์์.
ํ์ง๋ง, ๋ชฉํํ ๋๋ก ์ ๋ ํฌ๊ธฐํ์ง ์๊ณ ์ด์ฌํ ์ ์งํด๋ณด๊ณ ์ ํฉ๋๋ค.
์๋ก์ด ๋์ ์ ํ์๋ ๋ชจ๋ ๋ถ๋ค ์์ํฉ๋๋ค ๐