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(결과물을 정렬하지 않음, 속도가 더 빠름)
DINSTINCT는 GROUP BY절과 마찬가지로 조회결과를
그룹으로 묶어서 그 결과를 가져온다.
주로 UNIQUE한 칼럼을 조회할 경우 사용되는 구절임.
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;