sql - Derby DB最后x行平均值

标签 sql derby window-functions

我有以下表格结构。

   ITEM                  TOTAL
-----------         -----------------
ID  |  TITLE        ID  |ITEMID|VALUE
 1       A          1      2      6
 2       B          2      1      4
 3       C          3      3      3
 4       D          4      3      8
 5       E          5      1      2
 6       F          6      5      4
                    7      4      5
                    8      2      8
                    9      2      7
                    10     1      3
                    11     2      2
                    12     3      6

我正在使用Apache Derby DB。我需要在SQL中执行平均计算。我需要显示项目ID的列表及其最近3条记录的平均总数。
也就是说,对于ITEM.ID 1,我将转到TOTAL表并选择与ITEMID 1相关联的行的最后3条记录。在Derby数据库中,我可以对给定的项目ID执行此操作,但是如果不提供特定的ID,则无法做到。让我告诉你我做了什么。
SELECT ITEM.ID, AVG(VALUE) FROM ITEM, TOTAL WHERE TOTAL.ITEMID = ITEM.ID GROUP BY ITEM.ID

此SQL给出列表中所有项目的平均值。但这将计算总表的所有值。我只需要最后3条记录。所以我将SQL更改为:
SELECT AVG(VALUE) FROM (SELECT ROW_NUMBER() OVER() AS ROWNUM, TOTAL.* FROM TOTAL WHERE ITEMID = 1) AS TR WHERE ROWNUM > (SELECT COUNT(ID) FROM TOTAL WHERE ITEMID = 1) - 3

如果我提供商品ID 1或2等,这将起作用。但是,如果不提供商品ID,则无法对所有商品执行此操作。

我尝试使用分区在ORACLE中执行相同的操作,并且它起作用了。但是derby不支持分区。有WINDOW,但我无法使用它。

甲骨文一
SELECT ITEMID, AVG(VALUE) FROM(SELECT ITEMID, VALUE, COUNT(*) OVER (PARTITION BY ITEMID) QTY, ROW_NUMBER() OVER (PARTITION BY ITEMID ORDER BY ID) IDX FROM TOTAL ORDER BY ITEMID, ID) WHERE IDX > QTY -3 GROUP BY ITEMID ORDER BY ITEMID

我需要使用derby DB的可移植性。

所需的输出是这个
     RESULT
-----------------
ITEMID  |  AVERAGE
  1         (9/3)
  2         (17/3)
  3         (17/3)
  4         (5/1)
  5         (4/1)
  6          NULL

最佳答案

您已经注意到,Derby对SQL 2003“OLAP操作”的支持不完整。

有一些初始工作(请参阅https://wiki.apache.org/db-derby/OLAPOperations),但是该工作仅部分完成。

我认为目前还没有人在为此领域向Derby添加更多功能。

所以是的,Derby具有row_number函数,但没有,Derby(当前)没有partition by

关于sql - Derby DB最后x行平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42249425/

相关文章:

mysql - SQL 设置子查询,其中值来自主查询

php - 连接基于 sql id 的整数以用于 html ID 标记

sql - 如何在Postgresql的窗口函数中计数 "distinct"?

apache-spark - 为什么 Window 函数失败并显示 "Window function X does not take a frame specification"?

sql - 如何在 Postgres 中选择 TOP 记录。没有类似的问题

PHP/MySQL 将相同的数据插入到两个表中

sql - SQL 中的 Firebase 数据库

java - netbeans apache derby 连接无法正常工作

java - 使用 servlet 关闭数据库连接的问题

java - 在 Apache Derby 中创建用户定义的聚合函数