본문 바로가기
C.W.K.
Stream
Lesson 05 of 10 · published

DISTINCT와 집계 함수

~12 min · sql, distinct, aggregate

Level 0Scout
0 XP0/80 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

Row에서 요약으로

DISTINCT는 값이 겹치는 row를 걷어내고, 집계 함수는 여러 row를 숫자 하나로 접어.

  • COUNT(*)는 row 개수를 세. COUNT(col)은 그 컬럼에서 NULL이 아닌 것만 세고.
  • SUM(col), AVG(col), MIN(col), MAX(col)은 이름 그대로야.
  • GROUP_CONCAT(col, sep)은 값들을 구분자로 이어 문자열 하나로 만들어.
  • TOTAL(col)은 SUM과 같은데, 입력이 비었을 때 NULL 대신 0을 돌려줘.
Tip: WHERE 없이 테이블 전체에 SELECT count(*)를 걸면 SQLite에서 O(n)이야. 진짜로 row를 하나씩 훑거든. 자주 부를 거면 count를 캐시하거나 세는 용도의 row를 따로 두는 게 나아. 이건 Postgres도 마찬가지야.

Code

집계 + DISTINCT·sql
SELECT count(*) FROM users;                              -- 총 row
SELECT count(DISTINCT role) FROM users;                  -- 고유 role count
SELECT role, count(*) FROM users GROUP BY role;          -- 그룹 count

SELECT min(created_at), max(created_at) FROM messages;

SELECT GROUP_CONCAT(username, ', ') FROM users;
-- alice, bob, carol, dave

External links

Exercise

messages 테이블에서 네 가지를 구해봐. 전체 row 수, 고유한 conversation_id 개수, conversation마다의 message 개수, 그리고 conversation마다 가장 이른 created_at과 가장 늦은 created_at. 각각 SELECT 하나로 끝내고, 표본 몇 개를 손으로 확인해. DISTINCT와 GROUP BY를 각각 어디에 어떻게 썼는지 적어둬.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.