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

(n-1)レベルのデータに基づいてnレベルの集計データを最適に計算する方法(Oracle)

    MODELに感謝します 構文機能GregVからのヒント Oracleフォーラムで porno を必要とせずに、このクエリを非常に短く正確に書くことができました。 。かっこいい!

    したがって、サンプルコードと少なくとも 10g との違いを簡単に確認するには、 Oracle dbでは、上記でリンクされている元のスクリプトを次の方法で変更する必要があります。

            /**************************
             * the original sample query base data
             ***************************/
            ...  -- all content before the last select of the original example-SQL
    
            /**************************
             * the original sample porno-query
             ***************************/
    
            ,agg_porno as (
                select
                    descr,
    
                    ...  -- all the porno-query details
    
                from sum_data_lvl1
                /*
                 DESCR                              SUM        AGG_LVL SUM_ID
                 ---------------------------------- ---------- ------- ------
                 money available in 2013            33233235.3       1 MA
                 money spent in 2013                 4253235.3       1 MS
                 money bound to contracts in 2013     34333500       1 MB
                 money spent 2013 in % of available         12       2 MSP
                 money bound 2013 in % of available        103       2 MBP
                */
            )
    
            /**************************
             * the new nice model-based query instead
             ***************************/
    
            ,agg_model as (
                select
                    descr,
                    trunc(s,1) as sum,
                    agg_lvl,
                    sum_id 
                from sum_data_lvl1
                model
                    dimension by (sum_id)
                    measures (descr, sum as s, agg_lvl)
                    rules (
                        s['MSP'] = s['MS'] / s['MA'] * 100,
                        s['MBP'] = s['MB'] / s['MA'] * 100
                    )
            )
            /*
             DESCR                              SUM        AGG_LVL SUM_ID
             ---------------------------------- ---------- ------- ------
             money available in 2013            33233235.3       1 MA
             money spent in 2013                 4253235.3       1 MS
             money bound to contracts in 2013     34333500       1 MB
             money spent 2013 in % of available       12.7       2 MSP
             money bound 2013 in % of available      103.3       2 MBP
             */
    
    select * from agg_porno where 1=0  -- change to 1=1 to see these results
    union all select * from agg_model where 1=1  -- change to 1=0 to hide these results
    



    1. SQL Server(T-SQL)のdatetime2値にタイムゾーンオフセットを追加する

    2. SQLのAVG関数の小数点以下の桁数を2に制限するにはどうすればよいですか?

    3. テーブルに主キーがありません

    4. PostgreSQLは標準のSQL構文を強制します