Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách tính toán tốt nhất dữ liệu tổng hợp cấp n dựa trên dữ liệu cấp (n-1) (Oracle)

Cảm ơn MODEL tính năng cú pháp gợi ý từ GregV trong diễn đàn Oracle Tôi có thể viết truy vấn này thực sự rất ngắn và chính xác mà không cần đến khiêu dâm . Tuyệt vời!

Vì vậy, để dễ dàng kiểm tra sự khác biệt với mã mẫu của tôi và ít nhất là 10g Oracle db bạn chỉ cần sửa đổi tập lệnh gốc được liên kết ở trên theo cách sau:

        /**************************
         * 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết nối C # với Oracle

  2. Làm thế nào để loại bỏ nhiều phân vùng khoảng thời gian dựa trên ngày?

  3. Tự động tăng dần cho Oracle

  4. Oracle SQL - Mệnh đề IN hiển thị tất cả bản ghi được đưa ra trong điều kiện IN ngay cả khi dữ liệu không có trong bảng

  5. Tương đương COLLATE có dấu và không phân biệt chữ hoa chữ thường trong Oracle