mysql多维数据仓库指南--第一篇第4章(2)
时间:2008-03-24 来源:jiangdm
翻转查询
上述的查询都是有维度值约束的(基于维度选择事实)。翻转的维度查询是基于一个或者多个度量值来选择事实的。换句话说,你的查询将从事实表(星型模式的中心)到维表,这就是为什么会称为:翻转查询了。接下来的两个例子就是翻转查询类型的维度查询。
明星产品
列表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个月(6-12月)中,哪些客户每年有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的客户的订单数(计数),该客户是唯一满足上述选择约束条件的客户。
小结
本章你学习和应用了维度查询,即总是用代理键进行关联的查询。另外,你将在接下来的章节中用到维度查询更复杂的查询形式。