Oracle GROUP BY、HAVINGセクションおよび適用
GROUP BY
Oracle SQLでは、GROUP BYセクションを使用してグループの数または合計を取得できます.
例
SELECT STY_NM
, SUM(SALE_QTY) AS SALE_QTY
FROM STY
WHERE 1=1
GROUP BY STY_NM
前述したように、GROUP BYを使用して、スタイル別の販売数を得ることができる.HAVINGセクションで条件セクションを追加できます.
HAVING
SELECTゲートにHAVINGと書くことが多いようです
HAVINGセクションは、WHEREセクションのようにGROUP BY統計値の条件を追加することができる.
基本構文
SELECT [GROUP BY 절에 지정된 컬럼명1], [GROUP BY별로 집계할 컬럼명2]
FROM [테이블명]
WHERE 1=1 <WHERE 생략이 가능하다.>
GROUP BY [그룹으로 묶을 컬럼명]
HAVING [조건]
例
SELECT STY_NM
, SUM(SALE_QTY) AS SALE_QTY
FROM STY
WHERE 1=1
GROUP BY STY_NM
HAVING SUM(SALE_QTY) BETWEEN 500 AND 700
たとえば、HAVING祭りがなければ、バンドルされた果物や販売数はすべて調べられますが、HAVINGSUM(SALE QTY)BETWEEN 500 AND 700が追加された後、STYNMの販売数は500と700の間の値しか調べられません.
重複データの表示
SELECT CUST_ID,
CUST_NM,
COUNT(*)
FROM TEMP_TEST
WHERE 1=1
GROUP BY CUST_ID, CUST_NM
HAVING COUNT(*) > 1
GROUP BYを重複データを検索する列に設定し、HAVINGセクションでCOUNT(*)>1の条件を設定して重複データを問合せます.ROLLUP
ROLLUP構文は、GROUP BYセクションとともに使用され、GROUP BYセクションでグループ化されます.
コレクション結果に対してより詳細な情報を返す機能を実行します.
SELECTセクションでは、通常のSELECTデータとそのデータの合計をROLLUPを使用して取得できます.
小計合計
SELECT SALE_DT AS 판매날짜
, FRUIT_CD AS 품목
, SUM(SALE_QTY) AS 판매수량
FROM FRUIT_TABLE
WHERE 1=1
GROUP BY ROLLUP(SALE_DT,FRUIT_CD)
結果から,ROLLUP(SALEDT,FRUIT CD)により総和と小計を求めた.
ROLLUPは、1列目の合計データとすべての合計データを出力します.
SALE DTとFRUIT CDの位置を変更した場合、FRUIT CDの合計データと
合計データをすべて出力します.
合計出力
SELECT SALE_DT AS 판매날짜
, FRUIT_CD AS 품목
, SUM(SALE_QTY) AS 판매수량
FROM FRUIT_TABLE
WHERE 1=1
GROUP BY ROLLUP((SALE_DT,FRUIT_CD))
全ての合計データをROLLUP(SALE DT、FRUIT CD)で出力できます.
GROUPING, GROUPING_ID
GROUPING関数には1つのパラメータしかありません.GROUPING ID関数には複数のパラメータを入力できます.
例
SELECT DECODE(GROUPING_ID(FRUIT_NUM,FRUIT_CD),3,'합계',FRUIT_NUM) AS 과일번호,
CASE WHEN GROUPING_ID(FRUIT_NUM,FRUIT_CD) = 1 THEN
DECODE(GROUPING_ID(FRUIT_NUM,FRUIT_CD),1,'',FRUIT_CD)
ELSE DECODE(GROUPING_ID(FRUIT_NUM,FRUIT_CD),1,'소계',FRUIT_CD)
END 과일
, SUM(SALE_QTY) AS 판매수량
, GROUPING_ID(FRUIT_NUM,FRUIT_CD) AS GROUPING_ID복수
FROM FRUIT_TABLE
WHERE 1=1
GROUP BY ROLLUP(FRUIT_NUM,FRUIT_CD)
GROUPING ID関数は、複数のカラムをパラメータとして使用できます.
パラメータのカラム順序に従って、カラムがNULLの場合は1を返し、1行をバイナリとします.
サンプル画像の表示
3行目を見ると、果物番号にはデータがあり、ゼロの果物のデータはありません.
つまり、0001は1を返します.(11行目も同じ内容)
20行目を見ると、フルーツ番号とフルーツのデータがなく、1と1
すなわち、0011は3を返す.
GROUPING IDを使用し、NULL部分にDECODEを使用して合計と小計を追加することで、データを簡単に見ることができます.
Reference
この問題について(Oracle GROUP BY、HAVINGセクションおよび適用), 我々は、より多くの情報をここで見つけました https://velog.io/@wjddnjs1121/groupbyテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol