【问题标题】:Writing OLAP SQL query编写 OLAP SQL 查询
【发布时间】:2012-12-03 17:26:16
【问题描述】:

我正在从事的项目需要以下内容:

  1. 创建标准化样本 rdbms(5 个表)
  2. 使用 Java 我在每个表中输入了 100 万行数据
  3. 对规范化表运行两个 OLTP 和两个 OLAP 查询。
  4. 非规范化表。
  5. 对它们运行相同的 OLTP 和 OLAP 查询并比较时间。

OLAP 查询是什么意思?我搜索了互联网,我能找到的只是我必须制作一个立方体,并在其上应用查询。如何在 RDBMS 上编写 OLAP 查询?我有一个样本: 表规范化(订单、产品、客户、分支、销售)

  1. 销售额:order_id、product_id、数量
  2. 产品:product_id、名称、描述、价格、sales_tax
  3. 客户:customer_id,f_name,l_name,tel_no,addr,nic,city
  4. 分支:branch_id,name,tel_no,addr,city
  5. 订单:order_id、customer_id、order_date、branch_id

我想在上面的表上写一个 OLAP 查询。我正在使用带有 SQL Developer 的 Oracle Express。

【问题讨论】:

  • OLAP 查询示例我为上表做了准备:SELECT BRANCH.BRANCH_ID, PRODUCT.PRODUCT_ID, ORDERS.ORDER_DATE,SUM(SALES.QUANTITY) FROM BRANCH,PRODUCT,SALES,ORDERS WHERE ORDERS.BRANCH_ID = BRANCH.BRANCH_ID AND SALES.PRODUCT_ID = PRODUCT.PRODUCT_ID AND ORDERS.ORDER_ID = SALES.ORDER_ID AND ORDER_DATE BETWEEN to_date ('02/01/2000', 'dd/mm/yyyy') 和 to_date ('12/ 12/2006', 'dd/mm/yyyy') GROUP BY BRANCH.BRANCH_ID,SALES.PRODUCT_ID, ORDERS.ORDER_DATE

标签: sql oracle rdbms olap


【解决方案1】:

有一些 SQL 函数有时称为“分析”、“窗口化”或“OLAP”,具体取决于您使用的 RDBMS。在某些情况下,它们可以提供巨大的性能改进,通常是比较同一组数据中的行,否则需要自连接。

当您使用 Oracle 时,我衷心建议您访问 asktom.oracle.com 并搜索“analytics rock”——您会发现一些很好的示例,这些示例解释得很好,比阅读 Oracle 文档容易得多,@987654321 @

一些注意事项:它们并不是严格意义上的“关系”,因为关系理论不涉及元组的顺序;它们在查询的其他部分之后执行 - 即在过滤和聚合之后;一些数据库在较小程度上实现了它们。

我看到 Oracle 也有单独的 OLAP 产品用于处理多维数据集,但目前这是企业版的单独许可选项,所以如果您使用的是 Express 版,我认为这不是您所指的。

编辑

这是一个简单的示例,大致基于您的数据模型,展示了如何使用分析函数来获得运行总计,如果没有它们,这并不容易:-

select 
o.customerid, 
o.orderid, 
o.orderdate, 
p.price, 
sum (p.price) over (partition by o.customerid order by o.orderdate) running_total

from orders o
inner join sales s on o.orderid = s.orderid
inner join product p on s.productid = p.productid

这给出(对于我输入的一些简单数据):-

CUSTOMERID           ORDERID              ORDERDATE PRICE RUNNING_TOTAL
-------------------- -------------------- --------- ----- -------------
1                    1                    01-JAN-12    30            30 
1                    2                    01-MAR-12    30            60 
1                    3                    01-APR-12    30            90 
1                    4                    01-MAY-12    30           120 

【讨论】:

  • 我不需要使用 SQL 函数,我需要的是为上面的表编写一个 SQL 查询,它不是 OLTP,而是 OLAP。我已经举了一个我认为可能是答案的例子,但我不确定。
  • @user1859596 我在您的示例中没有看到任何分析函数?我编辑了我的帖子以提供一个非常简单的计算运行总计的案例,如果没有分析函数,这将不是一件容易的事。还有无数其他的分析用例——请查看 asktom 网站——你会学到很多东西。
猜你喜欢
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多