[SQLD] GROUP BY, ORDER BY

younghyun·2023년 6월 7일
0

SQLD

목록 보기
5/18

다중행 함수

집계 함수, 그룹 함수, 윈도우 함수

집계 함수

COUNT(*)       // "NULL값을 포함"한 행의 수
COUNT(표현식)  // 표현식이 "NULL인 것을 제외"한 행의 수
SUM(표현식)    // 표현식의 "NULL값을 제외"한 합계
AVG(표현식)    // 표현식의 "NULL값을 제외"한 평균

GROUP BY

  • SELECT와 달리 ALIAS명을 사용할 수 없다.
  • WHERE절에는 올 수 없다.

ORDER BY

  • 컬럼명 대신 Alias명이나 컬럼 순서를 나타내는 정수를 혼용하여 사용할 수 있다.
// Case1. 칼럼명 사용 
SELECT DNAME, LOC, DEPTNO 
FROM DEPT 
ORDER BY DNAME, LOC, DEPTNO DESC;

// Case2. 칼럼명 + ALIAS명 사용 
SELECT DNAME DEPT, LOC AREA, DEPTNO 
FROM DEPT 
ORDER BY DNAME, AREA, DEPTNO DESC;

// Case3. 칼럼 순서번호 + ALIAS명 사용 
SELECT DNAME, LOC AREA, DEPTNO 
FROM DEPT 
ORDER BY 1, AREA, 3 DESC;
  • 기본적인 정렬은 ASC이다.
  • SQL에서는 NULL값을 가장 작은 값으로, ORACLE에서는 NULL값을 가장 큰 값으로 간주한다.

[53번] GROUP BY
중첩된 그룹함수는 최종 결과값이 1건이므로 group by 기준인 2개의 컬럼을 select절에 기술할 수 없다.

[55번] GROUP BY, ORDER BY
GROUP BY를 사용할 경우, ORDER BY에 GROUP BY 표현식이 아닌 값은 기술될 수 없다.

[59번] SELECT 문장 실행 순서
1) FROM: 테이블 참조
2) WHERE: 대상 데이터 아닌 것은 제거
3) GROUP BY: 행들을 소그룹화
4) HAVING: 그룹핑된 값의 조건에 맞는 것만 출력
5) SELECT: 데이터 값 출력/계산
6) ORDER BY: 데이터 정렬

TOP N 쿼리

순위가 높은 N개의 로우를 추출하기 위해 ORDER BY 절과 WHERE 절의 ROWNUM 조건을 같이 사용한다.
데이터의 일부가 먼저 추출된 후 정렬 작업이 일어나므로 주의하자.

TOP()

// TOP(2): 급여가 높은 2명을 출력
// WITH TIES: 같은 급여를 받는 사원이 있으면 같이 출력
SELECT TOP(2) WITH TIES ENAME, SAL 
FROM EMP 
ORDER BY SAL DESC;
profile
🌱 주니어 백엔드 개발자입니당

0개의 댓글