본문 바로가기

데이터/SQL

[혼공] 3-2장 Select문 기본(2)

1.ORDER BY 절 

 

- 결과의 값이나 개수에 대해서는 영향을 미치지 않지만, 결과가 출력되는 순서를 조절

- 기본값 ASC :오름차순 정렬, DESC : 내림차순

- WHERE절 다음에 나와야함 

- 정렬 기준을 1개 열이 아니라 여러 개 열로 지정 가능 

 -> 첫 번째 지정 열로 정렬한 후에 동일할 경우 다음 지정 열로 정렬 가능

 

SELECT 열_이름
    FROM 테이블_이름
    WHERE 조건식
    GROUP BY 열_이름
    HAVING 조건식
    ORDER BY 열_이름
    LIMIT 숫자

 

ex) 데뷔일자(debut_data)가 빠른 순서대로 출력 

SELECT mem_id, mem_name, debut_date 
    FROM member
    ORDER BY debut_date;

 

ex) 데뷔 순서(debut_date)가 늦은 순서대로 출력

SELECT mem_id, mem_name, debut_date 
    FROM member
    ORDER BY debut_date DESC;

 

ex) 평균키(height)가 164 이상인 회원들을 키가 큰 순서대로 조회 

SELECT mem_id, mem_name, debut_date, height 	
    FROM member
    WHERE height >= 164
    ORDER BY height DESC;

 

ex) 평균 키가 큰 순서대로 정렬하되, 평균 키가 같으면 데뷔 일자가 빠른 순서로 정렬

SELECT mem_id, mem_name, debut_date, height
    FROM member
    WHERE height >= 164
    ORDER BY height DESC, debut_date ASC;

 

1.1 LIMIT

 

- 출력하는 개수를 제한

- LIMIT 시작, 개수 

 

ex) 데뷔일자(debut_date)가 빠른 회원 3건만 추출 

 - LIMIT (0,3)과 동일 0번째부터 3개 추출

SELECT mem_name, debut_date
    FROM member
    ORDER BY debut_date
    LIMIT 3;

 

ex) 평균 키(height)가 큰 순으로 정렬하되, 3번째부터 2건만 조회 

SELECT mem_name, height 
    FROM member
    ORDER BY height DESC
    LIMIT 3,2;

 

1.2 DISTINCT

 

- 중복된 데이터를 1개만 남기고 제거 

SELECT DISTINCT addr FROM member;

 

2.GROUP BY 절

 

- 그룹으로 묶어주는 역할 

 

2.1 집계 함수 

 

- GROUP BY 절과 함께 쓰이며 데이터를 그룹화(grouping)해주는 기능 

함수명 설명
SUM() 합계
AVG() 평균
MIN() 최소값
MAX() 최대값
COUNT() 행의 개수
COUNT(DISTINCT) 행의 개수(중복은 1개만 인정)

 

 

ex) 각 회원(mem_id)별로 구매한 개수 (amount)를 합쳐서 출력 

- GROUP BY로 회원별로 묶어준 후에 SUM()함수로 구매한 개수 합침

SELECT mem_id, SUM(amount) FROM buy GROUP BY mem_id;

- 별칭 사용

SELECT mem_id "회원 아이디", SUM(amount) "총구매 개수" 
FROM buy GROUP BY mem_id;

 

ex) 회원이 구매한 금액의 총합 출력 

- 구매한 금액 가격(price) * 수량(amount)

SELECT mem_id "회원 아이디", SUM(price * amount) "총구매 개수" 
FROM buy GROUP BY mem_id;

 

ex) 전체 회원이 구매한 물품 개수(amount)의 평균 

SELECT AVG(amount) "평균 구매 개수" FROM buy;

 

ex) 각 회원이 한 번 구매시 평균 몇 개를 구매

SELECT mem_id, AVG(amount) "평균 구매 개수"
FROM buy
GROUP BY mem_id;

 

ex) 회원 테이블(member)에서 연락처가 있는 회원의 수 카운트 

- 국번(phone1) 또는 전화번호(phone2)의 열 이름을 지정

- NULL 값인 항목을 제외하고 카운트하여  연락처가 있는 회원의 인원만 나옴

 

SELECT COUNT(phone1) "연락처가 있는 회원" FROM member;

 

2.2 Having 절

 

- 집계함수에 대해서 조건을 제한 

- HAVING절은 꼭 GROUP BY절 다음에 나와야 함

 

ex) 회원별 총 구매액 중 총 구매액이 1000 이상만 추출

SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
FROM buy
GROUP BY mem_id
HAVING SUM(price*amount) > 1000;