컴퓨터 과학/[프로그래머스] SQL DB Essentials

Chapter 05 DML : 단일 테이블 검색문 (Part 2)

계란💕 2022. 3. 6. 23:14

3. 검색문의 GROUP BY 절과 HAVING절

 

  - SELECT문의 GROUP BY절과 HAVING절

    -> HAVING을 이용하면 원하는 특정 그룹만 선택 가능하다.

    -> 집단 함수를 함께 사용해서 그룹별 통계치를 생성한다. 

 

  (1) 집단함수(Aggregate Functions)

  -  집단함수명 (  [ALL 또는 DISTINCT] 컬럼명 또는 표현식 )

  ex) COUNT, SUM, AVG, MIN, MAX, STDDEV, VARIAN

  - 집단 함수는 WHERE절에 사용할 수 없다. (HAVING 절에는 가능)

 

  (2) GROUP BY절

  - 표준SQL에서는 WHERE, GROUP BY절에서 alias 사용 불가능

  - MySQL에서는 GROUP BY절 사용 가능 

  - 집단 함수의 중첩은 허용하지 않는다.

  - GROUP BY절의 중첩 불가능

 

  (3) HAVING절 

   - 형식

    -> WHERE 투플_조건식: 투플 조선식이 true인 "투플"만 선택
    -> HAVING 그룹_조건식: 그룹 조건식이 true인 "그룹"만 선택
  - HAVING절을 WITH절로 변환할 수도 있다.

  

  (4) 검색문의 ORDER BY절

  - ASC(디폴트), DESC

  - 컬럼명 대신 alias나 컬럼위치(position)도 가능

  - MySQL, SQL Server에는 null이 가장 작은 값

  - Oracle에서는 null이 가장 큰 값

  - SELECT 목록에 나타나지 않은 컬럼을 ORDER BY절에 사용 가능하다. 

    -> GROUP BY절을 같이 사용하면, SELECT목록에 나타나지 않은 컬럼을 ORDER BY절에 사용할 수 없다.

    

  (5) LIMIT절

  - SELECT문이 출력하는 최대 투플 수를 정의한다.

  - MySQL에서만 가능하며 Oracle의 ROWNUM과 유사하다.

  - 형식

    -> offset: 결과에 포함할 첫번째 투플의 위치

    -> row_count: 결과로 리턴할 투플의 최대 수

  - 동점자 처리는 못 한다.

 

 

  - Top_n Query: 순위(등수)가 높은 n개 투플을 검색, 동점자 처리 기능을 제공해야한다. 

    -> ORDER BY절은 사용 불가 (데이터를 먼저 검색한 후, 마지막으로 정렬한다. )

 

  - 윈도우 함수(Window Functions)를 사용한 Top_n Query 처리

    -> ROW_NUMBER(): 투플에 일련번호를 부여한다. pagination에 활용

    -> RANK(): 투플 순위를 제공하고 동점자 처리

    Ex) ROW_NUMBER() OVER (ORDER BY ...) 

        RANK() OVER (ORDER BY ...)

 

  - 윈도우 함수 주의사항

    -> SELECT문에서만 사용가능

    -> WHERE절이나 GROUP BY절에서 윈도우 함수의 컬럼 별칭 사용 불가능하다.

      -> WITH절을 사용해서 해결가능!

 

 

본 게시글은 프로그래머스의 "학교 밖에서 듣는 전공 필수SQL/DB Essentials" 강의 내용을 토대로 업로드 했습니다.

 

 

[스터디/2기] 학교 밖에서 듣는 전공필수 SQL/DB Essentials

⏰마지막 할인 중 2기 일정이 맞지 않다면 오픈 알림 신청하고 최저가에 수강하세요! 오픈 알림 신청 개발자에게 데이터베이스를 이해하는 능력은 필수! 데이터베이스의 기본 개념부터 ERD를 읽

programmers.co.kr

https://programmers.co.kr/learn/courses/13484