- Today
- Total
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- AI
- ๋จธ์ ๋ฌ๋
- ๋ชจ๋์์ฐ๊ตฌ์
- python
- github
- 2์ฃผ์ฐจ
- ๊นํ๋ธ
- error
- ์ฃผํผํฐ๋ ธํธ๋ถ
- ML
- ๋ฐ์ดํฐ
- bigquery
- ํจ์ํ์ฉ
- data
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- sql
- ํ๊ณ ๋ก
- ๋ฅ๋ฌ๋
- ํ์ด์ฌ๋ฌธ๋ฒ
- ๋ฐ์ธ4๊ธฐ
- ๊ฐ๋ ์ ๋ฆฌ
- Jupyter Notebook
- 1์ฃผ์ฐจ
- ํจ์
- ๋์ ๋๋ฆฌ
- ํ์ด์ฌ
- ํ๊ณ
- ๋ฐ์ดํฐ์ฌ์ด์ธํฐ์คํธ
- ๋ณ์
- ๋น ์ฟผ๋ฆฌ
[SQL] ๋ฐ์ดํฐ ์ง๊ณํ๊ธฐ(COUNT, SUM, AS(๋ณ์นญ), AVG, MAX, MIN), GROUP BY, HAVING ๋ณธ๋ฌธ
[SQL] ๋ฐ์ดํฐ ์ง๊ณํ๊ธฐ(COUNT, SUM, AS(๋ณ์นญ), AVG, MAX, MIN), GROUP BY, HAVING
jpocket 2025. 4. 4. 14:46๐ํ์ต ๋ด์ฉ
- ์ง๊ณํจ์(COUNT, SUM, AVG, MAX, MIN)
- COUNT
- SUM, AVG, MAX, MIN
- ์ง๊ณํจ์์ ํน์ง
- ๋ฐ์ดํฐ ๊ทธ๋ฃนํํ๊ธฐ(GROUP BY)
- ๊ทธ๋ฃนํํ ๋ฐ์ดํฐ ์กฐ๊ฑด์ฃผ๊ธฐ(HAVING)
๐ ์ง๊ณํจ์(COUNT, SUM, AVG, MAX, MIN)
๐ COUNT
๐ COUNT(*)
- ๋ชจ๋ ํ์ ๊ฐ์๋ฅผ ์นด์ดํธ
- NULL์ ํฌํจ
- ์ปฌ๋ผ์ NULL๊ฐ ์ ๋ฌด๋ฅผ ์ฒดํฌํ ์ ์๋ค.
mysql("""
SELECT *
FROM bike
WHERE weathersit IS NULL
""")
๐ COUNT(์ปฌ๋ผ๋ช )
- NULL ๊ฐ์ ์ ์ธํ ์ปฌ๋ผ๋ช ์ ํ์ ๊ฐ์๋ฅผ ์นด์ดํธ
mysql("""
SELECT COUNT(*) AS cnt
, COUNT(weathersit) AS weather_cnt
FROM bike
""")
๐ SUM, AVG, MAX, MIN
๐ SUM(์ปฌ๋ผ๋ช )
- ์ง์ ํ ์ปฌ๋ผ๋ช ๊ฐ์ ํฉ๊ณAVG(์ปฌ๋ผ๋ช )
- ์ง์ ํ ์ปฌ๋ผ๋ช ๊ฐ์ ํ๊ท MAX(์ปฌ๋ผ๋ช )
- ์ง์ ํ ์ปฌ๋ผ๋ช ๊ฐ ์ค ๊ฐ์ฅ ํฐ ๊ฐMIN(์ปฌ๋ผ๋ช )
- ์ง์ ํ ์ปฌ๋ผ๋ช ๊ฐ ์ค ๊ฐ์ฅ ์์ ๊ฐMAX(์ปฌ๋ผ๋ช )๊ณผ MIN(์ปฌ๋ผ๋ช )๋ ๋๊ณ ๋ฎ์ ์(๋ ์ง์, ์ํ๋ฒณ ์(Z-A)๋ฑ)์ผ๋ก ์ฐ์ฐํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ
mysql("""
SELECT SUM(casual) AS casual_sum
, SUM(registered) AS registered_sum
FROM bike
WHERE yr = 2011
AND mnth = 'Mar'
""")
AS
๐ as ํ ๋ ๊ผญ ๋ฐ์ดํ ํด์ค์ผ ํ ๊นโ
๐
โ
๊ณต๋ฐฑ์ด ์๊ณ , ์์ฝ์ด๋ ์๋๋ฉด ๋ฐ์ดํ ์ ์จ๋ OK
โ
๊ณต๋ฐฑ, ๋์๋ฌธ์ ๊ตฌ๋ถ, ํน์๋ฌธ์ ํ์ํ ๋ ์จ์ฃผ๊ธฐ!
โ ์ซ์๋ก ์์ํ๋ ๋ณ์๋ช ์ ์จ์ฃผ๊ธฐ! ๐
select orderId, orderDate, c.customerId, country, city
from orders as o
inner join customers as c
on orders.customerId = c.customerId
๐ฅ๐กํ์ง๋ง ์์ด ์ฐ๋ ๊ฑด ์ ๋๋ค.โ
orders ํ ์ด๋ธ ๋ณ์นญ์ o ๋ผ๊ณ ํ๋๋ฐ On์กฐ๊ฑด์ ์์ orders๋ก ์ฌ์ฉํ๋ฉด
๐ ํผ๋์ด ์๊ธฐ๊ฑฐ๋ ์ค๋ฅ๊ฐ ๋ ์ ์๋ค. ๐
select orderId, orderDate, c.customerId, country, city
from orders as o
inner join customers as c
on o.customerId = c.customerId
๊ฐ์ ๋ณ์นญ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋
select orderId, orderDate, c.customerId, country, city
from orders
inner join customers as c
on orders.customerId = c.customerId
๋ณ์นญ ์์ด ์ฌ์ฉํด์ผ ํ๋ค.
๐ AVG(์ปฌ๋ผ๋ช )
์ง์ ํ ์ปฌ๋ผ๋ช ๊ฐ์ ํ๊ท
๐ MAX(์ปฌ๋ผ๋ช )
์ง์ ํ ์ปฌ๋ผ๋ช ๊ฐ ์ค ๊ฐ์ฅ ํฐ ๊ฐ
๐ MIN(์ปฌ๋ผ๋ช )
์ง์ ํ ์ปฌ๋ผ๋ช ๊ฐ ์ค ๊ฐ์ฅ ์์ ๊ฐ
MAX(์ปฌ๋ผ๋ช )**๊ณผ MIN(์ปฌ๋ผ๋ช )๋ ๋๊ณ ๋ฎ์ ์(๋ ์ง์, ์ํ๋ฒณ ์(Z-A)๋ฑ)์ผ๋ก ์ฐ์ฐํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ
๐ GROUP BY
- select์ ์ count(weather) ์ด๋ฐ ์์ผ๋ก ์ปฌ๋ผ๋ช ๊ณผ ์ง๊ณํจ์๊ฐ ๊ฐ์ด ๊ธฐ์ ๋์ด์์ผ๋ฉด, ์ปฌ๋ผ๋ช ์ group by ์ ์ ๊ธฐ์ ๋์ด์ผ ํ๋ค.
- ๊ฒฐ๊ณผ๊ฐ์ group by ์ ์ ๊ธฐ์ ๋ ์ปฌ๋ผ ํญ๋ชฉ๋ค์ ํ์ ๊ฐ์์ ์ํด ๊ฒฐ์ ๋๋ค.
๐ํํ
SELECT
FROM
WHERE
GROUP BY
ORDER BY
LIMIT
mysql("""
SELECT season AS "๊ณ์ ", AVG(temp) AS "ํ๊ท ์จ๋"
FROM bike
GROUP BY season
""")
๊ณ์ ๋ณ ํ๊ท ์จ๋๋ฅผ ๋ํ๋ด๋ ์ฝ๋๋ค.
๐ HAVING
๊ทธ๋ฃนํจ์๋ฅผ ์ ์ฉํด์ ๋์จ ๊ฒฐ๊ณผ ์ค, ์ํ๋ ์กฐ๊ฑด์ ๋ถํฉํ๋ ๊ฒ๋ง ํํฐ๋งํ ์ ์๋ค.
๐ ํํ
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT
mysql("""
SELECT weathersit AS "๋ ์จ", SUM(cnt) AS "์ด์ฉ๊ฑด์ํฉ๊ณ"
FROM bike
GROUP BY 1
HAVING SUM(cnt) >= 100000
""")
๋ ์จ๋ณ ์ด์ฉ๊ฑด์์ ํฉ๊ณ ์ค 10๋ง๊ฑด ์ด์์ ๋ฐ์ดํฐ๋ง ํ์ธํ๋ค.
โ Q. ๊ทธ๋ ๋ค๋ฉด ํํฐ๋ง ์ญํ ์ ํด์ฃผ๋ where, having ์ ์ฐจ์ด๋ ๋ฌด์์ผ๊น?
๐ WHERE
- ๐ก์ง๊ณํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- GROUP BY ์ ์ ์ฌ์ฉํ๋ค.
mysql("""
SELECT season AS "๊ณ์ ", temp AS "์จ๋"
FROM bike
WHERE temp >= 0.3
""")
๐ HAVING
- ๊ทธ๋ฃน์ ์ ์ฉํ๋ค.
- ๐กGROUP BY ํ์ ์ฌ์ฉํ๋ค.
mysql("""
SELECT season AS "๊ณ์ ", AVG(temp) AS "ํ๊ท ์จ๋"
FROM bike
GROUP BY season
HAVING AVG(temp) >= 0.3
""")
โ Q. having์ ์์๋ ๋ณ์นญ ์ฌ์ฉํ๋ฉด ์ ๋๋
⇒ MySQL์์๋ HAVING ์ ์์ ๋ณ์นญ(alias) ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค, ๋ค๋ง ๋ฒ์ ์ด๋ SQL ์ฒ๋ฆฌ ์์์ ๋ฐ๋ผ ์์ธ๊ฐ ์์ ์ ์์ต๋๋ค. ์ผ๋ถ ๊ตฌ๋ฒ์ ์ด๋ ํน์ SQL ๋ชจ๋์์๋ ๋ณ์นญ์ HAVING์์ ์ธ์ํ์ง ๋ชปํ๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๊ทธ๋์ ๋ณดํต์ ๐ก์๋ ์์ ํ ๋ฒ ๋ ์ฐ๋ ๋ฐฉ์์ด ๊ฐ์ฅ ์์ ํฉ๋๋ค: