학습주제
ORDER BY
LIMIT
DISTINCT
GROUPT BY
HAVING
학습내용
출력 순서를 조절하는 ORDER_BY
SELECT mem_id, mem_name, debut_name
FROM member
ORDER BY debut_date;
내림차순 사용
SELECT mem_id, mem_name, debut_name
FROM member
ORDER BY debut_date DESC;
ORDER BY
는 WHERE
뒤에 나와야 함.
SELECT mem_id, mem_name, debut_date, height
FROM member
WHERE height >= 164
ORDER BY height DESC;
정렬기준을 여러개 열 사용
SELECT mem_id, mem_name, debut_date, height
FROM member
WHERE height >= 164
ORDER BY height DESC, debut_date ASC;
출력의 개수를 제한하는 LIMIT
SElECT *
FROM member
LIMIT 3;
LIMIT 시작, 개수
0부터 시작함. ORDER BY 와 사용
SELECT mem_name, debut_date
FROM member
ORDER BY debut_date
LIMIT 3;
SELECT mem_name, height
FROM member
ORDER BY height DESC
SELECT mem_name, height
FROM member
ORDER BY height DESC
LIMIT 3, 2;
저 앞의 3이 세번째인 것인지, 인덱스가 [3]
인 것인지 헷갈렸다. 후자가 맞다 즉 네번째 인덱스 [3]
에 접근함.
중복된 결과를 제거하는 DISTINCT
SELECT addr FROM member; -- 출력값이 중구난방
SELECT addr FROM member ORDER BY addr; -- 경기, 경남, 경북, 서울 끼리 모여있음.
SELECT DISTINCT addr FROM member ORDER BY addr; -- 중복된 데이터 1개만 남기고 제거
집계함수
SUM()
AVG()
MIN()
MAX()
COUNT()
COUNT(DISTINCT) 중복은 1개만 인정
사용 예
SELECT mem_id, SUM(amount) FROM buy GROUP BY mem_id;
열 이름이 SUM(amount)로 새로 지정됨.
SELECT mem_id "회원 아이디", SUM(amount) "총 구매 개수"
FROM buy
GROUP BY mem_id;
회원이 구매한 총액
SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
FROM buy
GROUP BY
mem_id;
전체 회원이 구매한 물품 개수의 평균. 따로 그룹 미지정
SELECT AVG(amount) "평균 구매 개수"
FROM buy;
숫자를 세수는 COUNT
SELECT COUNT(*) FROM member;
몇개 열에서 NULL이더라도 다 세줌
NULL을 제외하고 싶으면 해당열을 지정
SELECT COUNT(phone1) "연락처가 있는 회원" FROM member;
GROUP BY에 조건을 적용하려면 HAVING(=WHERE)
보통 HAVING은 집계 함수에 대해서 조건을 제한하는 것이라고 생각
SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
FROM buy
GROUP BY mem_id
HAVING SUM(price*amount) > 1000;
여기에 총 구매액이 큰 사용자를 나타내기 위해 DESC 사용 가능
SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
FROM buy
GROUP BY mem_id
HAVING SUM(price*amount) > 1000
ORDER BY SUM(price*amount) DESC;