관리 메뉴

웹개발 블로그

[SQL] SELECT Order By, Group By 본문

◆SQL/SELECT

[SQL] SELECT Order By, Group By

쿠키린 2023. 6. 12. 22:01

실습

ㄴ RDBMS : ORACLE - DB :  SCOTT 

ORDER BY

- 조회 결과를 특정 attribute(s) 기준으로 정렬하여 가져오고 싶을 때 사용한다.

ㄴ 여러개 속성 사용 가능하다.

ㄴ 💥앞에 명시된 컬럼 순서대로 정의된다.(그룹지어서 정렬됌)

- default 정렬 방식은 오름차순이다

- 오름차순 정렬은 ASC로 표기한다

- 내림차순은 정렬은 DESC로 표기한다.

 

SELECT *FROM emp ORDER BY DEPTNO ASC, SAL DESC;
--1차적으로 부서번호, 2차적으로 그 부서번호 안에서 급여 내림차순

AGGREGATE FUNCTION (애그리게이트 펑션) <-- GROUP BY절과 연결돼요~!

- 여러 tuple(행)들의 정보를 요약해사 하나의 값으로 추출하는 함수

- 대표적으로 COUNT, SUMM MAX, MIN,AVG 함수가 있다.

- (주로) 관심있는 attribute에 사용된다. e.g.) AVG(sal), MAX(HIREDATE)

-  NULL 값들은 제외하고 요약 값을 추출한다.

 

EX)  임직원 수를 알고 싶다

SELECT COUNT(*) FROM emp;

-> 튜플의 행이 출력된다.

 

SELECT COUNT(컬럼) FROM emp;

-> 컬럼명을 넣어주면 NULL을 제외하고 COUNT한다.

 

 

GROUP BY <- 결과들을 그룹지어 통계하기

- 키워드 : 각 ~~별

ㄴ 특정 ID만 조회하는게 아닌 각 ~별로 조회하고 싶다면

ㄴ EX) 각 프로젝트 별로 참여한 임원 수와, 최대 연봉, 평균연봉 구하기

 

EX) 각 부서별로 남녀의 수가 어떻게  되는지 구하기

HAVING

- GROUP BY와 함께 사용한다.

- AGGREGATE FUNCTION의 결과값을 바탕으로 그룹을 필터링하고 싶을 때 사용한다.

- HAVING절에 명시된 조건을 만족하는 그룹만 결과에 포함된다.

- (중요)그룹핑한 결과에 대한 조건을 주기

EX) 참여 인원이 7명 이상인 ~

ㄴ HAVING COUNT(*) >= 7

 

EX) 회사 평균연봉보다 적은 부서의 평균연봉 구하기

회사 평균연봉
결과

🔽 헷갈리는 예제

EX)  

프로젝트 참여 인원이 7명 이상인 프로젝트에

한정해서 각 프로젝트별로 

프로젝트에 참여한 90년대생들의 수와 이들의 평균연봉구하기.

 

만약 HAVING COUNT(*) >= 7 로 적었다면 땡!

==> HAVING절로 속기 쉽다.

그룹핑한 결과에 대한 값에 조건을 주기에 HAVING을 사용하면 안된다.

 

(해결)

🔽 WHERE절에서 해줘야한다.

WHERE ID IN (SELECT ID FROM 테이블명 GROUP BY ID HAVING COUNT(*) >= 7) 

ㄴ 서브쿼리 설명 : 참여 인원이 7명 이상 

 

핵심!

-> 내가 걸어야할 조건이 WHERE절에서 조건을 명시할것인지, HAVING절에서 조건을 명시할것인지 파악해야한다. 

 

 

SELECT 실행순서

🔽단, 개념적인 순서일뿐, 각 RDBMS에서 어떻게 구현했는지에 따라 다르다.

6 SELECT attribute(s) or Aggregate function(s)
1 FROM table(s)
2 [WHERE conditions(s)]
3 [GROUP BY group attribute(s)]
4 [HAVING group condition(s)]
5 [ORDER BY attribute(s)]

'◆SQL > SELECT' 카테고리의 다른 글

[SQL] 이전, 다음 - 조회  (1) 2024.12.11
[SELECT] 서브쿼리  (2) 2024.08.09
[SQL] JOIN / UNION 차이?  (1) 2024.08.09
[SQL] SELECT - DISTINCT : SELECT바로 뒤에 작성, 중복제거  (0) 2023.06.12