[정보처리기사/실기] SQL - SELECT (2)

2022. 9. 12. 20:52·Computer Science/정보처리기사
728x90

1. WINDOW 함수 

GROUP BY 절을 이용하지 않고 함수의 인수로 지정한 속성의 값을 집계한다 

POW_NUMBER() : 윈도우별로 각 레코드에 대한 일련번호를 반환
RANK() : 윈도우별로 순위를 반환하며, 공동 순위를 반영
DENSE_RANK() : 윈도우별로 순위를 반환하며, 공동 순위를 무시하고 순위를 부여 

PARTITION BY : WINDOW 
함수의 적용 범위가 될 속성을 지정함 
ORDER BY : 특정 속성을 기준으로 그룹화하여 검색할 때 사용 
HAVING 절 : GROUP BY 와 함께 사용되며, 그룹에 대한 조건을 지정함 

2. 그룹 함수


GROUP BY 절에 지정된 그룹별로 속성의 값을 집계할 때 사용
COUNT() : 그룹별 튜플 수를 구함
SUM(): 그룹별 합계 
AVG() : 그룹별 평균 

SELECT 상여내역, 상여금
	ROW_NUMBER() OVER (PARTITION BY 상여내역 ORDER BY 상여금 DESC) AS NO
FROM 상여금;
SELECT 상여내역, 상여금
RANK() OVER (PARTITION BY 상여내역 ORDER BY 상여금 DESC) AS 상여금 순위
FROM 상여금;

# 부서별 상여금의 평균 

SELECT 부서, AVG(상여금) AS 평균
FROM 상여금
GROUP BY 부서;
SELECT 부서, COUNT(*) AS 사원수
FROM 상여금
WHERE 상여금 >= 100
GROUP BY 부서
HAVING COUNT(*) >= 2

HAVING 은 GROUP BY 와 함께 사용되며, 그룹에 대한 조건을 지정함 

SELECT 부서, 상여내역, SUM(상여금) AS 상여금합계
FROM 상여금 
GROUP BY ROLLUP(부서, 상여내역);

함수 : 인수로 주어진 속성을 대상으로 그룹별 소계를 구하는 함수. 속성의 개수가 n개이면 n+1 레벨까지, 하위 레벨에서 상위 레벨 순으로 데이터가 집계됨 

SELECT 부서 AVG(상여금) AS 평균
FROM 상여금
GROUP BY 부서;
SELECT 부서, COUNT(*) AS 사원수
FROM 상여금
GROUP BY 부서;
SELECT 부서, COUNT(*) AS 사원수
FROM 상여금 
WHERE 상여금 >= 100
GROUP BY 부서
HAVING COUNT(*) >= 2;

ROLLUP(속성명, 속성명, ...) : 인수로 주어진 속성을 대상으로 그룹별 소계를 구하는 함수 
속성의 개수가 n개이면 n+1 레벨까지, 하위레벨에서 상위 레벨 순으로 데이터가 집계됨 

SELECT 부서, 상여내역, SUM(상여금) AS 상여금합계
FROM 상여금
GROUP BY ROLLUP(부서, 상여내역);

CUBE(속성명, 속성명 ...) : ROLLUP 과 유사한 형태지만 CUBE 는 인수로 주어진 속성을 대상으로 모든 조합의 그룹별 소계를 구함
속성의 개수가 n개 이면 2^n 레벨까지, 상위레벨에서 하위레벨 순으로 데이터가 집계됨 

SELECT 부서, 상여내역, SUM(상여금) AS 상여금합계
FROM 상여금
GROUP BY CUBE(부서, 상여내역);

3. 집합 연산자를 이용한 통합 질의 

UNION : 두 SELECT 문의 조회 결과를 통합하여 모두 출력함. 중복된 행은 한 번만 출력함 
UNION ALL : 두 SELECT 문의 조회 결과를 통합하여 모두 출력함. 중복된 행도 그대로 출력함 
INTERSECT : 두 SELECT 문의 조회 결과 중 공통된 행만 출력. 
EXCEPT : 첫번째 SELECT 문의 조회 결과에서 두번째 SELECT 문의 조회 결과를 제외한 행을 출력함 

<사원> 테이블과 <직원> 테이블을 통합

SELECT *
FROM 사원
UNION
SELECT *
FROM 직원;

 

<문제풀이> p.50 ~ 
#1

SELECT 학과, COUNT(*) AS 학과별튜플수
FROM 학생 
GROUP BY 학과;

#2 

SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수 
FROM 성적 
GROUP BY 과목이름 
HAVING AVG(점수) >= 90;

#3

SELECT 이름, 전공, 신청과목 
FROM 학생정보, 신청정보 
WHERE 학생정보.학번 = 신청정보.학번 
AND 신청정보.신청과목 = 'Java'
GROUP BY 이름, 전공, 신청과목 -- 이름, 전공, 신청과목을 기준으로 그룹을 지정한다 
HAVING 전공 = '컴퓨터공학'

#4

SELECT 결제여부, COUNT(*) AS 학생수 
FROM 결제
GROUP BY 결제여부;

# 5

SELECT SUM(psale) 
FROM Sale
WHERE pid IN (SELECT id
	   FROM Product
       WHERE name LIKE 'USB%')

#6

SELECT 소속도시, AVG(매출액)
FROM 지점정보 WHERE 매출액 > 1000
GROUP BY 소속도시
HAVING COUNT(*) >= 3;

# 7 

SELECT 장학내역, 장학금, 
	ROW_NUMBER() OVER (PARTITION BY 장학내역 ORDER BY 장학금 DESC) AS NUM
FROM 장학금;

# 8 

SELECT 학과, 장학내역, SUM(장학금) AS 장학금 합계 
FROM 장학금
GROUP BY ROLLUP(학과, 장학내역)
728x90

'Computer Science > 정보처리기사' 카테고리의 다른 글

[정보처리기사/실기] SQL - Procedure / Trigger  (1) 2022.09.13
[정보처리기사/실기] SQL DML - JOIN  (0) 2022.09.13
SQL - SELECT 문 활용하기  (0) 2022.09.11
SQL - DML 데이터 조작어  (0) 2022.09.11
[정보처리기사/실기] SQL - DCL 데이터 제어어  (0) 2022.09.11
'Computer Science/정보처리기사' 카테고리의 다른 글
  • [정보처리기사/실기] SQL - Procedure / Trigger
  • [정보처리기사/실기] SQL DML - JOIN
  • SQL - SELECT 문 활용하기
  • SQL - DML 데이터 조작어
minjiwoo
minjiwoo
Data Engineering과 Cloud Native 기술에 대해 Dive Deep 하는 플랫폼 엔지니어가 되는 것을 목표로 하고 있습니다. 경험과 공부한 내용을 기록하며 지속가능한 엔지니어가 되는 것이 꿈입니다.
minjiwoo
minji's engineering note
minjiwoo
전체
오늘
어제
  • 분류 전체보기 (613)
    • Data Engineering (42)
      • Apache Spark (11)
      • Databricks & Delta Lake (9)
      • Airflow (3)
      • SQL (6)
      • Trouble Shooting (2)
      • Hadoop (2)
      • MLOps (1)
    • Cloud Engineering (104)
      • AWS (23)
      • Linux 🐧 (29)
      • Docker 🐳 (21)
      • Kubernetes ⚙️ (20)
      • Ansible (10)
    • Computer Science (87)
      • 네트워크 (9)
      • 운영체제 (25)
      • 정보처리기사 (48)
      • CS 기술 면접 스터디 (3)
    • Programming Languages (27)
      • Python (17)
      • C와 C++ (10)
    • Backend (5)
      • Django (2)
    • 프로젝트 (2)
      • 테크포임팩트 (2)
    • iOS (11)
      • 레이블러리 (2)
    • Algorithm (PS) (275)
      • LeetCode (6)
    • 개발일기 (30)
      • 내돈내산 후기🎮 (3)
      • 개발자 취준생 (5)
      • Today I Learned (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Hi there

인기 글

태그

  • 백트래킹
  • 알고리즘
  • SPARK
  • 백준
  • ansible
  • 데이터브릭스
  • Databricks
  • 데이터엔지니어링
  • 파이썬
  • EC2
  • 쿠버네티스
  • 프로그래머스
  • 데이터엔지니어
  • 운영체제
  • docker
  • 코딩테스트
  • dp
  • linux
  • 빅데이터
  • 클라우드
  • Kubernetes
  • 스파크
  • Leetcode
  • 카카오코딩테스트
  • BFS
  • python
  • 리눅스
  • AWS
  • Swift
  • dfs

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
minjiwoo
[정보처리기사/실기] SQL - SELECT (2)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.