Back to home page

OSCL-LXR

 
 

    


0001 -- The first SELECT query below is different from q49 of TPCDS v1.4
0002 SELECT
0003   channel,
0004   item,
0005   return_ratio,
0006   return_rank,
0007   currency_rank
0008 FROM (
0009        SELECT
0010          'web' as channel,
0011          in_web.item,
0012          in_web.return_ratio,
0013          in_web.return_rank,
0014          in_web.currency_rank
0015        FROM
0016          (SELECT
0017            item,
0018            return_ratio,
0019            currency_ratio,
0020            rank() over (ORDER BY return_ratio) AS return_rank,
0021            rank() over (ORDER BY currency_ratio) AS currency_rank
0022          FROM (
0023             SELECT
0024               ws.ws_item_sk AS item,
0025               CAST(SUM(COALESCE(wr.wr_return_quantity, 0)) AS DECIMAL(15, 4)) /
0026                 CAST(SUM(COALESCE(ws.ws_quantity, 0)) AS DECIMAL(15, 4)) AS return_ratio,
0027               CAST(SUM(COALESCE(wr.wr_return_amt, 0)) AS DECIMAL(15, 4)) /
0028                 CAST(SUM(COALESCE(ws.ws_net_paid, 0)) AS DECIMAL(15, 4)) AS currency_ratio
0029             FROM
0030               web_sales ws LEFT OUTER JOIN web_returns wr
0031                 ON (ws.ws_order_number = wr.wr_order_number AND ws.ws_item_sk = wr.wr_item_sk),
0032               date_dim
0033             WHERE
0034               wr.wr_return_amt > 10000
0035                 AND ws.ws_net_profit > 1
0036                 AND ws.ws_net_paid > 0
0037                 AND ws.ws_quantity > 0
0038                 AND ws_sold_date_sk = d_date_sk
0039                 AND d_year = 2001
0040                 AND d_moy = 12
0041             GROUP BY
0042               ws.ws_item_sk)
0043          ) in_web
0044      ) web
0045 WHERE (web.return_rank <= 10 OR web.currency_rank <= 10)
0046 UNION
0047 SELECT
0048   'catalog' AS channel,
0049   catalog.item,
0050   catalog.return_ratio,
0051   catalog.return_rank,
0052   catalog.currency_rank
0053 FROM (
0054        SELECT
0055          item,
0056          return_ratio,
0057          currency_ratio,
0058          rank()
0059          OVER (
0060            ORDER BY return_ratio) AS return_rank,
0061          rank()
0062          OVER (
0063            ORDER BY currency_ratio) AS currency_rank
0064        FROM
0065          (SELECT
0066            cs.cs_item_sk AS item,
0067            (cast(sum(coalesce(cr.cr_return_quantity, 0)) AS DECIMAL(15, 4)) /
0068              cast(sum(coalesce(cs.cs_quantity, 0)) AS DECIMAL(15, 4))) AS return_ratio,
0069            (cast(sum(coalesce(cr.cr_return_amount, 0)) AS DECIMAL(15, 4)) /
0070              cast(sum(coalesce(cs.cs_net_paid, 0)) AS DECIMAL(15, 4))) AS currency_ratio
0071          FROM
0072            catalog_sales cs LEFT OUTER JOIN catalog_returns cr
0073              ON (cs.cs_order_number = cr.cr_order_number AND
0074              cs.cs_item_sk = cr.cr_item_sk)
0075            , date_dim
0076          WHERE
0077            cr.cr_return_amount > 10000
0078              AND cs.cs_net_profit > 1
0079              AND cs.cs_net_paid > 0
0080              AND cs.cs_quantity > 0
0081              AND cs_sold_date_sk = d_date_sk
0082              AND d_year = 2001
0083              AND d_moy = 12
0084          GROUP BY cs.cs_item_sk
0085          ) in_cat
0086      ) catalog
0087 WHERE (catalog.return_rank <= 10 OR catalog.currency_rank <= 10)
0088 UNION
0089 SELECT
0090   'store' AS channel,
0091   store.item,
0092   store.return_ratio,
0093   store.return_rank,
0094   store.currency_rank
0095 FROM (
0096        SELECT
0097          item,
0098          return_ratio,
0099          currency_ratio,
0100          rank()
0101          OVER (
0102            ORDER BY return_ratio) AS return_rank,
0103          rank()
0104          OVER (
0105            ORDER BY currency_ratio) AS currency_rank
0106        FROM
0107          (SELECT
0108            sts.ss_item_sk AS item,
0109            (cast(sum(coalesce(sr.sr_return_quantity, 0)) AS DECIMAL(15, 4)) /
0110              cast(sum(coalesce(sts.ss_quantity, 0)) AS DECIMAL(15, 4))) AS return_ratio,
0111            (cast(sum(coalesce(sr.sr_return_amt, 0)) AS DECIMAL(15, 4)) /
0112              cast(sum(coalesce(sts.ss_net_paid, 0)) AS DECIMAL(15, 4))) AS currency_ratio
0113          FROM
0114            store_sales sts LEFT OUTER JOIN store_returns sr
0115              ON (sts.ss_ticket_number = sr.sr_ticket_number AND sts.ss_item_sk = sr.sr_item_sk)
0116            , date_dim
0117          WHERE
0118            sr.sr_return_amt > 10000
0119              AND sts.ss_net_profit > 1
0120              AND sts.ss_net_paid > 0
0121              AND sts.ss_quantity > 0
0122              AND ss_sold_date_sk = d_date_sk
0123              AND d_year = 2001
0124              AND d_moy = 12
0125          GROUP BY sts.ss_item_sk
0126          ) in_store
0127      ) store
0128 WHERE (store.return_rank <= 10 OR store.currency_rank <= 10)
0129 ORDER BY
0130   -- order-by list of q49 in TPCDS v1.4 is below:
0131   -- 1, 4, 5
0132   1, 4, 5, 2
0133 LIMIT 100