[혼공] 깊게 알아보는 SELECT

data_hamster·2023년 5월 5일
0

학습주제
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 BYWHERE 뒤에 나와야 함.

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;
profile
반갑습니다 햄스터 좋아합니다

0개의 댓글

관련 채용 정보