[22/05/12]GROUP BY

Que Lin·2022년 5월 12일

MS-SQL

목록 보기
3/11

GROUP BY절

: 특정 칼럼을 기준으로 그룹화함
칼럼명 입력(SELECT절에서는 그룹화한 칼럼명 또는 집계함수 입력가능)

숫자 집계함수

: 숫자값을 가진 여러 행들에 대해 하나의 결과값을 반환

COUNT(*)

NULL을 포함한 전체 행의 수

COUNT(칼럼)

칼럼 내 NULL을 제외한 행의 수

COUNT(DISTINCT 칼럼)

칼럼 내 NULL과 중복을 제외한 행의 수

SUM(칼럼)

NULL을 제외한 합계

AVG(칼럼)

NULL을 제외한 평균

MAX(칼럼)

최댓값

MIN(칼럼)

최솟값

문자 집계 쿼리

: 문자값을 가진 여러 행들에 대해 하나의 결과값을 반환

XML

(EXtensible Markup Language 확장가능한 마크로 둘러싸인 언어) : 칼럼의 내용을 나열해 주는 역할, 계층 구조를 가진 요소들로 구성되어 있음
FOR XML PATH('') 쿼리 실행결과를 XML로 반환
ex)

SELECT STUFF(CONCAT(',',거주지)
FROM 고객정보
FOR XML PATH('')),1,1,'')AS 내역

STUFF : 불필요한 내용을 제거해주는 역할
STUFF(문자열, 시작위치, 길이, 바꿀 문자열)
: 문자열의 시작위치부터 길이만큼의 내역을 바꿀 문자열로 바꿈

ex)

SELECT 기준 STUFF(SELECT CONCAT(',',나열)
                 FROM 테이블명
                 WHERE 기준 = A.기준
                 FOR XML PATH('')),1,1,'')AS 내역
FROM 테이블명 A
GROUP BY 기준

HAVING절

: 그룹화한 데이터에서 조건에 맞는 데이터만 가져옴
집계함수, 연산자 들을 이용

--평균 나이가 20 초과인 ID그룹(A,B,C) 및 평균나이
SELECT LEFT(ID,1) AS ID그룹, AVG(나이) AS [평균 나이]
FROM 고객정보
GROUP BY LEFT(ID,1)
HAVING AVG(나이)>20
ORDER BY AVG(나이) DESC

-- 미혼이거나 여자인 고객 중 적어도 2명 이상의 고객이 사는 거주지 및 고객수
SELECT 거주지, COUNT(*) AS 고객수
FROM 고객정보
WHERE 결혼유무 = N'미혼' OR 성별 = N'여'
GROUP BY 거주지
HAVING COUNT(*)>=2
ORDER BY 고객수 DESC
profile
1일 1커밋 1일 1벨로그!

0개의 댓글