17.10 - 例: 国と市ごとの売上げのサマリーの表示 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL関数、式、および述部

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1145-171K-JPN
Language
日本語 (日本)

次のようなsales_viewテーブルのデータがあるとします。

PID Cost Sale Margin State County City
1 38350 50150 11800 CA Los Angeles Long Beach
1 63375 82875 19500 CA San Diego San Diego
1 46800 61200 14400 CA Los Angeles Avalon
2 40625 53125 12500 CA Los Angeles Long Beach

County ごと、および City ごとの売上げのサマリーを調べるには、次のSELECT文を使用します。

   SELECT county, city, sum(margin) 
   FROM sale_view
   GROUP BY GROUPING SETS ((county),(city));

問合わせにより、次のデータがレポートされます。

   County       City        Sum(margin)
   -----------  ----------  -----------
   Los Angeles  ?                 38700
   San Diego    ?                 19500
   ?            Long Beach        24300
   ?            San Diego         19500
   ?            Avalon            14400

この例の場合、nullは列のすべての値を表わしていることに注意してください。それは、示されているグループ化セットからこの列が除外されているためです。

基本データがnullの行と、グループ化セットでnullが生成された行を区別するには、GROUPING関数を使用します。

   SELECT county, city, sum(margin), 
          GROUPING(county) AS County_Grouping, 
          GROUPING(city) AS City_Grouping
   FROM sale_view
   GROUP BY GROUPING SETS ((county),(city));

結果は次のようになります。

   County      City       Sum(margin) County_Grouping City_Grouping
   ----------- ---------- ----------- --------------- -------------
   Los Angeles ?                38700               0             1
   San Diego   ?                19500               0             1
   ?           Long Beach       24300               1             0
   ?           San Diego        19500               1             0
   ?           Avalon           14400               1             0
   

拡張グループ化指定が列に対して集約を実行し、その列を特定のグループ化から除外したために結果行に現われたnullを置換するために、GROUPINGを使用することもできます。 例えば、

   SELECT CASE 
            WHEN GROUPING(county) = 1
            THEN '-All Counties-'
            ELSE county
          END AS County,
          CASE 
            WHEN GROUPING(city) = 1
            THEN '-All Cities-'
            ELSE city
          END AS City,
          SUM(margin) 
   FROM sale_view
   GROUP BY GROUPING SETS (county,city);

問合わせにより、次のデータがレポートされます。

   County          City          Sum(margin)
   --------------  ------------  -----------
   Los Angeles     -All Cities-        38700
   San Diego       -All Cities-        19500
   -All Counties-  Long Beach          24300
   -All Counties-  San Diego           19500
   -All Counties-  Avalon              14400