sql >> データベース >  >> RDS >> Oracle

複数の列を持つOracleロールアップ関数

    GROUPING SET句を使用して、必要なセットを正確に指定する方が簡単だと思います。

    WITH data(val1, val2, val3) AS
         ( SELECT 'a' ,'a-details' ,'1' FROM DUAL
         UNION ALL
         SELECT 'b' ,'b-details' ,'2' FROM DUAL
         UNION ALL
         SELECT 'c' ,'c-details' ,'3' FROM DUAL
         )
    SELECT NVL(val1,'Total Result'),
         val2,
         SUM(val3) tot
    from data
    group by grouping sets ((val1, val2),());
    

    計算するレベルを直接指定するので、より効率的だと思います。

    http://sqlfiddle.com/#!4/8301d/3

    CUBEとROLLUPは、多数の集計レベルを自動的に生成するのに便利です(たとえば、ディメンション階層内のすべてのレベル)。CUBEで生成された大きなレベルから小さなサブセットを削除したい場合は、GROUPINGIDを使用する場合があります。セットですが、GROUPING SETは、特定の集計レベルを指定するために正確に設計されています。



    1. Mytop –LinuxでMySQL/MariaDBのパフォーマンスを監視するための便利なツール

    2. データベーストリガーが気に入らないですか?あなたは彼らと一緒に働く方法を知らないだけです!

    3. cordovaを使用してプロジェクトファイルにローカルに保存されているSqliteデータベースファイル[アセットフォルダ]にアクセスして更新する方法

    4. LinuxでのDG40DBCデバッグツールとしてのstraceの使用