1. 집계함수

2. GroupBy & Having & DISTINCT

3. Group BY(실무 쿼리들)

1. 집계함수

1-1) Count() : 수량 계산

--테이블(MY_TABLE)에 남아있는 칼럼수 조회--
SELECT COUNT(*) AS 칼럼수 FROM MY_TABLE

--테이블(MY_TABLE) 이름(MY_NAME)값이 있는 ROW 수 조회--
SELECT COUNT(MY_NAME) AS ROW수 FROM MY_TABLE

1-2) AVG() : 평균

--테이블 (MY_TABLE)의 평균나이(AGE) 조회--
SELECT AVG(AGE) AS 평균나이 FROM MY_TABLE

--테이블(MY_TABLE)의 수량(QT)의 전체 평균(AS 평균수량)조회--
SELECT AVG(QT) AS 평균수량 FROM MY_TABLE

1-3) MAX() : 최대값

--테이블 (MY_TABLE)의 최고령나이(AGE) 조회--
SELECT MAX(AGE) AS 최고령나이 FROM MY_TABLE

--테이블(MY_TABLE)의 수량(QT)의 가장 많은 수량(AS 가장많은수량)조회--
SELECT MAX(QT) AS 가장많은수량 FROM MY_TABLE

1-4) MIN() : 최소값

-테이블(MY_TABLE)의 최연소나이 조회--
SELECT MIN(AGE) AS 최연소 FROM MY_TABLE

--테이블(MY_TABLE)의 최소단가(UM) 조회--
SELECT MIN(UM) AS 최소단가 FROM MY_TABLE

1-5) SUM() : 합계

-- 테이블(MY_TABLE)의 총 나이값--
SELECT SUM(AGE) AS 총나이 FROM MY_TABLE

--테이블(MY_TABLE)의 공급금액(AM)과 부가세(VAT)를 합한 총금액 AS(합계금액)조회--
SELECT SUM(AM+VAT) AS 합계금액 FROM MY_TABLE

2. GroupBy & Having & DISTINCT

2-1) GroupBy(결과물을 정렬, 속도가 느림)

2-2) DISTINCT(결과물을 정렬하지 않음, 속도가 더 빠름)

2-3) GROUP BY vs DISTINCT의 차이점

2-4) HAVING

2-5) 문법

--GROUP BY
SELECT 칼럼 FROM 테이블 GROUP BY 칼럼명

--DISTINCT
SELECT DISTINCT 칼럼명 FROM 테이블명

2-6) 예제

2-6)-1. 테이블(MY_TABLE)에 나이(AGE)로 그룹을 지어 조회

--GROUP BY
SELECT AGE FROM MY_TABLE GROUP BY AGE

--DISTINCT
SELECT DISTINCT AGE FROM MY_TABLE

2-6)-2. 테이블

MY_TABLE)에 판매번호(NUM)별 AS평균단가(UM), AS최고단가, AS최저단가, AS합계단가 조회

--GROUP BY
SELECT NUM,AVG(UM)AS평균단가, MAX(UM)AS최고단가, MIN(UM)AS최소단가, 
SUM(UM)AS합계단가 FROM MY_TABLE GROUP BY NUM;

--DISTINCT
SELECT DISTINCT NUM,AVG(UM)AS평균단가, MAX(UM)AS최고단가, 
MIN(UM)AS최소단가,SUM(UM)AS합계단가 FROM MY_TABLE;

2-6)-3. 테이블(MY_TABLE)에 나이(AGE)가 35살 이상인 사람으로 그룹을 지어 조회

SELECT AGE FROM My_Table GROUP BY AGE WHERE HAVING AGE>=35;

2-6)-4. 테이블(MY_TABLE)에 거래처(PARTNER)별 등록된 거래처(AS 거래처)의수 조회

(단 등록된 거래처가 10개 이상인 거래처만 조회)

SELECT PARTNER, COUNT(*) AS 거래처수 FROM My_Table GROUP BY PARTNER HAVING 

3. Group BY(실무 쿼리들)

3-1) Group By 문법

--GROUP BY
SELECT 칼럼 FROM 테이블 GROUP BY 칼럼명

3-2) 실무 쿼리


SET @StrSql = N'
SELECT @AllCnt = COUNT(*) FROM T_FAQ_MAIN BD WITH(NOLOCK)
LEFT JOIN (
SELECT MT_BD_SQE, COUNT(0) AS MENT_CNT FROM T_FAQ_MENT WITH(NOLOCK)
GROUP BY MT_BD_SEQ
)
EM ON ME.MT_BD_SEQ = BD.BD_SEQ
LEFT JOIN T_FAQ_CATE CT1 WITH(NOLOCK) ON BD.BD_CT_CD = CT1.CT_CD
LEFT JOIN T_FAQ_CATE CT2 WITH(NOLOCK) ON BD.BD_CT_CD2 = CT2.CT_CD
LEFT JOIN SDIJ.dbo.T_MEM_MST MM WITH(NOLOCK) ON BD.BD_REG_ID = MM.MM_MEM_ID
WHERE 1=1' + @StrWhere;