[TIL] SQL/Aggregate functions

HYERINยท2024๋…„ 2์›” 12์ผ

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
8/13
post-thumbnail

๐Ÿ“– ์ด๋ก 

๐Ÿ“Œ ย  Aggregate Functions (์ง‘๊ณ„ํ•จ์ˆ˜)

FunctionDescription
COUNT์ด ๊ฐฏ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด์ฃผ๋Š” ํ•จ์ˆ˜
SUMํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•ด์ฃผ๋Š” ํ•จ์ˆ˜
AVGํ‰๊ท ์„ ๊ณ„์‚ฐํ•ด์ฃผ๋Š” ํ•จ์ˆ˜
MIN๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ฐพ์•„์ฃผ๋Š” ํ•จ์ˆ˜
MAX๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ฐพ์•„์ฃผ๋Š” ํ•จ์ˆ˜
FIRST์ฒซ๋ฒˆ์งธ ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์ฃผ๋Š” ํ•จ์ˆ˜
LAST๋งˆ์ง€๋ง‰ ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์ฃผ๋Š” ํ•จ์ˆ˜

๐Ÿ“Œ Group By

๊ทธ๋ฃนํ™”ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ

๐Ÿ“Œ Having

์กฐ๊ฑด์— ์ง‘๊ณ„ํ•จ์ˆ˜ ๊ฐ€ ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ WHERE ๋Œ€์‹  HAVING ์‚ฌ์šฉ


๐Ÿ’ป ์‹ค์Šต

COUNT ๋ฌธ๋ฒ•

select count(column) from tablename
where condition

SUM ๋ฌธ๋ฒ•

select sum(column) from tablename
where condition

AVG ๋ฌธ๋ฒ•

select avg(column) from tablename
where condition

MIN ๋ฌธ๋ฒ•

select min(column) from tablename
where condition

MAX ๋ฌธ๋ฒ•

select max(column) from tablename
where condition

GROUP BY ๋ฌธ๋ฒ•

select column1, column2, ...
from table
where condition
group by column1, column2, ...

HAVING ๋ฌธ๋ฒ•

select column1, column2, ...
from tablename
where condition
group by column1, column2, ...
having condition //์ง‘๊ณ„ํ•จ์ˆ˜ ํฌํ•จ
group by column1, column2, ...

๐Ÿงธ review

  • ๊ณต๊ณต๋ฐ์ดํ„ฐ csv ํŒŒ์ผ๋กœ ์—ฐ์Šตํ•˜๊ธฐ
    ์„œ์šธ์‹œ ๊ณต๊ณต์ž์ „๊ฑฐ ๋Œ€์—ฌ์†Œ๋ณ„ ์ด์šฉ์ •๋ณด(์›”๋ณ„)
  • ํŒ๋‹ค์Šค๋กœ ๋ฐ์ดํ„ฐ ์‚ดํŽด๋ณด๊ธฐ
    + ๋ฐ์ดํ„ฐ insert 80๋ถ„ ์†Œ์š”(์ฐธ๊ณ ํ•˜์„ธ์š”!)

โ—๏ธcsv ํŒŒ์ผ ์ธ์ฝ”๋”ฉ ์•Œ์•„๋ณด๋Š” ๋ฐฉ๋ฒ•

import chardet
filename = "์„œ์šธํŠน๋ณ„์‹œ ๊ณต๊ณต์ž์ „๊ฑฐ ๋Œ€์—ฌ์†Œ๋ณ„ ์ด์šฉ์ •๋ณด(์›”๋ณ„).csv" # ํŒŒ์ผ๋ช…
with open(filename,'rb')as f:
    result = chardet.detect(f.readline())
    print(result['encoding'])
  • ์ž์น˜๊ตฌ ๋ณ„๋กœ ๊ณต๊ณต์ž์ „๊ฑฐ ๋Œ€์—ฌ๊ฑด์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ๋Œ€์—ฌ์†Œ ์ˆœ์œผ๋กœ 5๊ฐœ ๊ฒ€์ƒ‰ํ•˜๊ณ  ํฐ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•˜์—ฌ ํ™•์ธ
select ์ž์น˜๊ตฌ, max(๋Œ€์—ฌ๊ฑด์ˆ˜) max from ๊ณต๊ณต์ž์ „๊ฑฐ
group by ์ž์น˜๊ตฌ
order by max(๋Œ€์—ฌ๊ฑด์ˆ˜) desc
limit 5;
  • ์ž์น˜๊ตฌ ๋ณ„๋กœ ๊ณต๊ณต์ž์ „๊ฑฐ ๋Œ€์—ฌ๊ฑด์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ์€ ๋Œ€์—ฌ์†Œ ์ˆœ์œผ๋กœ 5๊ฐœ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ž‘์€ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•˜์—ฌ ํ™•์ธ
select ์ž์น˜๊ตฌ, min(๋Œ€์—ฌ๊ฑด์ˆ˜) min from ๊ณต๊ณต์ž์ „๊ฑฐ
group by ์ž์น˜๊ตฌ
order by min(๋Œ€์—ฌ๊ฑด์ˆ˜)
limit 5;
  • ์ž์น˜๊ตฌ ๋ณ„๋กœ ๊ณต๊ณต์ž์ „๊ฑฐ ํ‰๊ท  ๋Œ€์—ฌ๊ฑด์ˆ˜๋ฅผ 5๊ฐœ ๊ฒ€์ƒ‰ํ•˜๊ณ , ํฐ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ (์†Œ์ˆ˜์ x)
select ์ž์น˜๊ตฌ, truncate(avg(๋Œ€์—ฌ๊ฑด์ˆ˜),-1) avg from ๊ณต๊ณต์ž์ „๊ฑฐ
group by ์ž์น˜๊ตฌ
order by avg(๋Œ€์—ฌ๊ฑด์ˆ˜) desc
limit 5;
  • '4๊ธ€์ž'์ธ ์ž์น˜๊ตฌ ๋ณ„ ๋Œ€์—ฌ๊ฑด์ˆ˜์˜ ํ‰๊ท ์ด 1500๊ฑด ์ด์ƒ์ธ ๊ฒฝ์šฐ๋ฅผ ๊ฒ€์ƒ‰
select ์ž์น˜๊ตฌ, truncate(avg(๋Œ€์—ฌ๊ฑด์ˆ˜),-1) avg from ๊ณต๊ณต์ž์ „๊ฑฐ
where ์ž์น˜๊ตฌ like '____'
group by ์ž์น˜๊ตฌ
having avg(๋Œ€์—ฌ๊ฑด์ˆ˜) >=1500;

์‹คํ—˜ํ™•์ธ


0๊ฐœ์˜ ๋Œ“๊ธ€