文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>mysql多维数据仓库指南--第一篇第4章(2)

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的客户的订单数(计数),该客户是唯一满足上述选择约束条件的客户。

 

小结

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

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载