์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ์์ ๋ ์์จ ๋ฐ์ดํฐ๋ฒ ์ด์ค - 3. SQL ๊ธฐ๋ณธ๋ค์ง๊ธฐ(SELECT์ GROUP BY)
1. ์ค์ตํ๊ฒฝ
SQL Workbench๋ฅผ ์ฌ์ฉํ์ฌ SQL ์ค์ต
- SQL Workbench : MySQL ์ฌ์ดํธ์์ ์ ๊ณตํด์ฃผ๋ ๋ฌด๋ฃ ํด๋ผ์ด์ธํธ SQL ์๋ํฐ
- ์ค์น
- connection ๋ง๋ค๊ธฐ (์์ ์ด ์งํ๋ ์๋ฒ - rds)
- ๋ค์ด๊ฐ๊ธฐ์
SHOW DATABASES;
USE prod;
SHOW TABLES;
2. SELECT
ํ ์ด๋ธ์์ ๋ ์ฝ๋๋ฅผ ์ฝ์ด์ค๋๋ฐ ์ฌ์ฉ
- CASE WHEN : ํ๋ ๊ฐ์ ๋ณํ์ ์ํด ์ฌ์ฉ ๊ฐ๋ฅ
- CASE WHEN ์กฐ๊ฑด THEN ์ฐธ์ผ ๋ ๊ฐ ELSE ๊ฑฐ์ง์ผ๋ ๊ฐ END ํ๋์ด๋ฆ
- NULL : null์ ์ฌ์น์ฐ์ฐ์ ํ๋ฉด null
- IN / LIKE : ๋ฌธ์์ด ๋งค์นญ / BETWEEN
- STRING functions
- LEFT, REPLACE, UPPER, LOWER, SUBSTRING, CONCAT, RPAD ๋ฑ
- ORDER BY : null ๊ฐ์ ์์๋ ์ค๋ฅธ์ฐจ์ ๊ธฐ์ค ๋งจ ์ฒ์
- ํ์
๋ณํ
- STR_TO_DATE, DATE_FORMAT
- cast ํจ์ : cast, convert
์ค์ต
-- ํ
์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋ ์
select count(1)
from session;
-- channel_id๊ฐ 5์ธ ๋ ์ฝ๋ ์
select count(1)
from session
where channel_id = 5;
-- case when
select channel_id, case
when channel_id in (1,5,6) then 'Social-Media'
when channel_id in (2,4) then 'Search-Engine'
else 'Something-Else'
end channel_type
from session;
-- COUNT ํจ์
select count(1) from count_test; -- ๋ชจ๋ ๋ ์ฝ๋ ์
select count(0) from count_test; -- ๋ชจ๋ ๋ ์ฝ๋ ์
select count(NULL) from count_test; -- 0
select count(value) from count_test; -- value๊ฐ NULL์ด ์๋ ๋ชจ๋ ๋ ์ฝ๋ ์
select count(DISTINCT value) from count_test; -- value๊ฐ NULL์ด ์๋ ๊ฐ ์ค ์ ๋ํฌ ๊ฐ
-- G๊ฐ ๋ค์ด๊ฐ ์ฑ๋ ๋ ์ฝ๋์ ์
select count(1)
from chennel
where chennel like '%G%';
-- casting ํจ์
select cast('100.0' as float), covert('100.0', float);
3. GROUP
SELECT์ ์คํ์ ํ ์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ๊ตฌ๋ฃนํํ์ฌ ๊ทธ๋ฃน๋ณ๋ก ๋ค์ํ ์ ๋ณด๋ฅผ ๊ณ์ฐ
- ๋จผ์ ๊ทธ๋ฃนํ ํ ํ๋๋ฅผ ๊ฒฐ์ (ํ๋ ์ด์์ ํ๋)
- GROUP BY ๋ก ์ง์
- ๋ค์ ๊ทธ๋ฃน๋ณ๋ก ๊ณ์ฐํ ๋ด์ฉ์ ๊ฒฐ์ : Aggregate ํจ์
- COUNT, SUM, AVG, MIN, MAX, GROUP_CONCAT
์ค์ต
-- ์๋ณ ์ธ์
์ ๊ณ์ฐ
select
left(created,7) as mon, -- date์์ ์๋ง ์ถ์ถ
count(1) as session_count
from session
group by 1 -- select์์ ์ฒซ๋ฒ์งธ ํ๋ = left(created,7)
order by 1;
-- ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์ฑ๋
select channel_id,count(1) as session_count
from session
group by 1
limit 1;
-- ์๋ณ ์ ๋ํฌํ ์ฌ์ฉ์ ์
select
left(created,7) as mon, -- date์์ ์๋ง ์ถ์ถ
count(distinct user_id) as user_count
from session
group by 1 -- select์์ ์ฒซ๋ฒ์งธ ํ๋ = left(created,7)
order by 1;
-- ์๋ณ ์ฑ๋๋ณ ์ ๋ํฌํ ์ฌ์ฉ์ ์
select
left(s.created,7) as mon,
c.channel,
count(distinct user_id) as mau
from session s
join chennel c on c.id = s.chennel_id
group by 1,2
order by 1 desc, 2;
์ถ์ฒ - ํ๊ธฐ์ฉ ๊ฐ์ฌ๋ : ์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ์์ ๋ ์์จ ๋ฐ์ดํฐ ๋ฒ ์ด์ค
'Back-end ๋ฐ๋ธ์ฝ์ค > week 01 - 02 TIL (java, DB)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 221028 - ๋ฐ์ดํฐ๋ฒ ์ด์ค MySQL ๊ณ ๊ธ๊ธฐ๋ฅ (0) | 2022.10.28 |
---|---|
[TIL] 221027 - ๋ฐ์ดํฐ๋ฒ ์ด์ค SQL : JOIN (0) | 2022.10.28 |
[TIL] 221025 - MySQL ์ฌ์ฉํ๊ธฐ (0) | 2022.10.25 |
[TIL] 221024 - ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์๊ฐ (0) | 2022.10.24 |
[TIL] 221021 - Java ์ค์ต ํ๋ก์ ํธ : ์ซ์์ผ๊ตฌ ๊ฒ์ (0) | 2022.10.21 |
๋๊ธ