Studynote/DB
[MySQL] SQL ์ ๋ฌธ - ๊ธฐ์ด๋ฌธ๋ฒ(2)
minzhen
2022. 3. 13. 17:49
์ด๋ฒ์๋ ํต๊ณ์ ์ธ ์ ๋ณด๋ฅผ ์์งํ๋ ๋ฐฉ๋ฒ ์ฆ, ์ต๋, ์ต์, ํ๊ท , ๊ฐฏ์ ๋ฑ๊ณผ ๊ด๋ จ ์๋ ๋ฌธ๋ฒ๋ค์ ์ ๋ฆฌํด๋ณธ๋ค.
- group by
๋์ผํ ๋ฒ์ฃผ๋ฅผ ๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋๋ก ๋ฌถ์ด์, ๋ฒ์ฃผ๋ณ ํต๊ณ๋ฅผ ๋ด์ฃผ๋ ๊ฒ
(1) ๊ฐ์ ๋ฒ์ฃผ๋ผ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ํ๋๋ก ๋ฌถ๊ณ , (2) ๊ฐ ๋ฒ์ฃผ์ ๋ฐ์ดํฐ ์๋ฅผ ๊ตฌํ ์ ์๋ค.
SELECT name, count(*) FROM users u
group by name
- ๊ฐ์ฅ ๋ํ์ ์ธ ์ค๋ฅ : group by๋ฅผ ํ๊ธด ํ์ง๋ง ๊ทธ ๋ฌถ์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ค ํต๊ณ์น๋ก ์ถ๋ ฅํด๋ฌ๋ผ๋ ๋ช ๋ น์ด๊ฐ ์์ด์!
select * from orders
group by payment_method
--- ์ด๋ฌ๋ฉด ์ถ๋ ฅํด๋ณด๋ฉด Error!
- max / min
์ต๋๊ฐ, ์ต์๊ฐ ์ฐพ๊ธฐ
SELECT week, min(likes) FROM checkins c
group by week
--- ์ฃผ์ฐจ๋ณ ์ข์์๊ฐ ๊ฐ์ฅ ์ ์ ์ ์ค๋์ ๋ค์ง ์กฐํํ๊ธฐ
SELECT week, max(likes) FROM checkins c
group by week
--- ์ฃผ์ฐจ๋ณ ์ข์์๊ฐ ๊ฐ์ฅ ๋ง์ ์ ์ค๋์ ๋ค์ง ์กฐํํ๊ธฐ
- avg
๋ฐ์ดํฐ๋ค์ ํต๊ณ๊ฐ
select week, avg(likes) from checkins
group by week
--- ์ฃผ์ฐจ๋ณ ์ค๋์ ๋ค์ง ๋น ์ข์์ ์์ ํ๊ท ์กฐํํ๊ธฐ
select week, round(avg(likes),2) from checkins
group by week
--- ์ฃผ์ฐจ๋ณ ์ค๋์ ๋ค์ง ๋น ์ข์์ ์์ ํ๊ท ์กฐํํ๊ธฐ, ๋จ ์์์ ์ ๋์งธ์๋ฆฌ๊น์ง๋ง ํ์ํ๋ค
- sum
๋ฐ์ดํฐ๋ค์ ํฉ๊ณ ๊ฐ
select week, sum(likes) from checkins
group by week
--- ์ค๋์ ๋ค์ง ์ค ์ฃผ์ฐจ๋ณ ํฉ๊ณ ๊ฐ์
- order by
์ค๋ฆ์ฐจ์, ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
select name, COUNT(*) from users
group by name
ORDER by count(*)
--- ์๋์ผ๋ก ์ค๋ฆ์ฐจ์ (asc : ์จ๋ ๋๊ณ ์ ์จ๋ ๋จ)
select name, COUNT(*) from users
group by name
ORDER by count(*) desc
--- desc : ๋ด๋ฆผ์ฐจ์
select * from checkins
order by likes
--- likes๊ฐ ์ ์ ๊ฒ๋ถํฐ ๋์ด. ์ฆ, group by๋ ๊ผญ ๊ฐ์ด ์จ์ผ ํ๋ ๊ฑด ์๋!
๐ ์๋ฌ๊ฐ ์ ๋๋ Query๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ SQL Query๊ฐ ์คํ๋๋ ์์๋ฅผ ์๋ ๊ฒ์ด ์ค์!
์ ์นธ์ ์ฟผ๋ฆฌ ์คํ๋๋ ์์ : from → group by → select → order by
- ์์ฉ : ์์ ๋ฌธ๋ฒ๋ค ํจ๊ป ์ฌ์ฉํ๊ธฐ
SELECT payment_method, count(*) from orders o
where course_title = '์น๊ฐ๋ฐ ์ข
ํฉ๋ฐ'
group by payment_method
order by count(*) desc
- Alias
์ด๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ์ธ์ง๋ฅผ ๋ณด์ฌ์ค!
SELECT payment_method, COUNT(*) as cnt from orders o
where o. course_title = '์ฑ๊ฐ๋ฐ ์ข
ํฉ๋ฐ'
group by payment_method