pocket

[SQL] ๋ฐ์ดํ„ฐ ์ง‘๊ณ„ํ•˜๊ธฐ(COUNT, SUM, AS(๋ณ„์นญ), AVG, MAX, MIN), GROUP BY, HAVING ๋ณธ๋ฌธ

Database/SQL

[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์—์„œ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ณดํ†ต์€ ๐Ÿ’ก์›๋ž˜ ์‹์„ ํ•œ ๋ฒˆ ๋” ์“ฐ๋Š” ๋ฐฉ์‹์ด ๊ฐ€์žฅ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค:

๋ฐ˜์‘ํ˜•