gpt4 book ai didi

sql - 编写 OLAP SQL 查询

转载 作者:行者123 更新时间:2023-12-04 14:06:19 24 4
gpt4 key购买 nike

我有一个正在进行的项目需要以下内容:

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

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

  1. 销售:order_id,product_id,数量
  2. 产品:product_id,name,description,price,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 查询。我将 Oracle Express 与 SQL Developer 结合使用。

最佳答案

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

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

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

我看到 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 - 编写 OLAP SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13900229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com