我正在进行的项目需要以下内容:
OLAP查询是什么意思?我搜索过互联网,所有我能找到的是我必须制作一个立方体,并对其进行查询。如何在RDBMS上编写OLAP查询?我有一个样本: 表格标准化(订单,产品,客户,分支机构,销售)
我想在上面的表上写一个OLAP查询。我正在使用Oracle Express和SQL Developer。
答案 0 :(得分:1)
有些SQL函数有时称为“分析”,“窗口”或“OLAP”,具体取决于您使用的RDBMS。在某些情况下,它们可以提供巨大的性能改进,通常是在比较同一组数据中的行,否则需要自联接。
当您使用Oracle时,我衷心建议您访问asktom.oracle.com并搜索“analytics rock” - 您会发现一些很好的示例,这些示例非常好解释并且比阅读Oracle文档更容易{{{ 3}}
有些注意事项:它们不是严格的“关系”,因为关系理论并没有解决元组的顺序;它们是在查询的其他部分之后执行的 - 即在过滤和聚合之后;并且它们在一定程度上由一些数据库实现。
我看到Oracle也有一个单独的OLAP产品用于处理多维数据集,但这是目前Enterprise Edition的单独许可选项,因此如果您使用的是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