본문 바로가기

SQL

ORDER BY 절과 GROUP BY 절

1) order by : 정렬 순서 지정

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

디폴트 값은 오름차순으로 정렬된다.

 

- 내림차순으로 정렬하고 싶다면?

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

 

desc를 사용하면 내림차순으로 정렬이 가능하다.

 

order by를 사용할 때 select, from, where, group by, order by 의 순서를 지키지 않으면 오류가 발생하니 주의하자.

 

- 정렬 기준 값을 2개 이상으로 하고 싶다면?

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

정렬 우선순위에 따라 정렬의 기준이 되는 열이름을 적고 정렬 방법을 옆에 지정해나가면 된다.

 

- LIMIT : 볼 데이터의 개수 지정

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

LIMIT 3으로 사용하면 정렬 기준 상위 3개만 보겠다는 의미

LIMIT 3,2는 정렬 기준 상위 3번째에서 2개만 보겠다는 의미

 

- DISTINCT : 중복되는 데이터에서 고유 값을 추출 (python의 unique함수와 유사)

SELECT DISTINCT addr FROM member;

 

2) group by : 기준이 되는 열을 지정하고 집계함수를 사용할 수 있게 함

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

이 코드를 예시로 설명해본다면 mem_id의 값들을 그룹으로 묶어서 amount값의 총합계(sum)를 구한다.

 

집계 함수의 종류에는 sum, avg, min, max, count 등이 있다. 

 

- AVG

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

mem_id의 값들을 그룹으로 묶어서 amount값의 평균값(AVG)을 구한다.

 

-  COUNT

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

위 코드의 1번은 전체 행렬을 가지고 와서 행 개수가 몇 갠지 알고 싶을 때 주로 사용한다.

2번은  member중에서 그룹별로 phone1에 데이터 값이 기입되어 있는 수를 합한다.

 

- HAVING : ORDER BY를 사용할 때 WHERE의 역할을 대신한다. 

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

거듭 언급하지만 SELECT, FROM, GROUP BY, HAVING, ORDER BY의 순서를 준수하자.