mysql多维数据仓库指南--第一篇第4章(2)

翻转查询

上述的查询都是有维度值约束的(基于维度选择事实)。翻转的维度查询是基于一个或者多个度量值来选择事实的。换句话说,你的查询将从事实表(星型模式的中心)到维表,这就是为什么会称为:翻转查询了。接下来的两个例子就是翻转查询类型的维度查询。

明星产品

       列表4-6给出的的维查询给出了包含月销售总额大于(等于)75,000的产品的销售订单。

列表4-6:翻转查询-每月明星产品

/*****************************************************************/
/*                                                               */
/* monthly_product_performer.sql                                 */
/*                                                               */
/*****************************************************************/
 
USE dw;
 
SELECT
  month_name
, year
, product_name
, SUM (order_amount)
, COUNT(*)
FROM
  sales_order_fact a
, product_dim b
, date_dim c
WHERE
    a.product_sk = b.product_sk
AND a.order_date_sk = c.date_sk
GROUP BY
  month_name
, year
, product_name
HAVING SUM (order_amount) >= 75000
ORDER BY
  month
, year
, product_name
;
/* end of script    

                                             

用以下命令运行该脚本:

mysql> \. c:\mysql\scripts\monthly_product_performer.sql

查询结果如下:

Database changed

+------------+------+------------+-------------------+----------+

| month_name | year |product_name| SUM (order_amount)| COUNT(*) |

+------------+------+------------+-------------------+----------+

| November   | 2007 | LCD Panel  |           75000.00|        2 |

+------------+------+------------+-------------------+----------+

1 row in set (0.00 sec)

忠实客户

列表4-7是比列表4-6更为复杂的翻转查询。如果你的用户需要知道在每年的后面7个月(612月)中,哪些客户每年有3以上的订单,你可以利用列表4-7中的脚本来获得结果。该查询说明,既便是这么复杂的一个查询,你仍然可以用维度查询。(译者注:原文中该说明似乎和脚本不一致,上面这段文字根据脚本翻译)。

列表4-7:翻转(忠实客户)

/*****************************************************************/
/*                                                               */
/* loyal_customer.sql                                            */
/*                                                               */
/*****************************************************************/
USE dw;
 
SELECT
  customer_number
, year
, COUNT(*)
FROM
  sales_order_fact a
, customer_dim b
, date_dim c
WHERE
    a.customer_sk = b.customer_sk
AND a.order_date_sk = c.date_sk
GROUP BY
  customer_number
, year
HAVING
    COUNT(*) > 3
AND (12 - MONTH (MAX (date))) < 7
;
/* end of script          */


以下面命令运行该脚本:

mysql> \. c:\mysql\scripts\loyal_customer.sql

结果显示如下:

 

Database changed

+-----------------+------+----------+

| customer_number | year | COUNT(*) |

+-----------------+------+----------+

|               1 | 2007 |        4 |

+-----------------+------+----------+

1 row in set (0.02 sec)

该结果显示了客户编号为1的客户的订单数(计数),该客户是唯一满足上述选择约束条件的客户。

 

小结

       本章你学习和应用了维度查询,即总是用代理键进行关联的查询。另外,你将在接下来的章节中用到维度查询更复杂的查询形式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值