Sql 栏「;f、 价格“;必须出现在GROUP BY子句中或在聚合函数中使用,但I';我已经使用了窗口功能
我的表有两列:Sql 栏「;f、 价格“;必须出现在GROUP BY子句中或在聚合函数中使用,但I';我已经使用了窗口功能,sql,postgresql,Sql,Postgresql,我的表有两列:date和price。它们都不是独一无二的 我需要以唯一的日期顺序获得运行总计(一个日期-此日期的值总和,下一个日期-下一个总和+上一个,依此类推) 我知道如何使用子查询执行此操作,但我想使用窗口函数: 有一个简单的查询: SELECT f.date, SUM(f.price) OVER () FROM f GROUP BY f.date 它返回错误: 列f.price必须出现在GROUP BY子句中,或在聚合函数中使用 但我已经使用了聚合函数(SUM) 谁能告诉我为什么会这样
date
和price
。它们都不是独一无二的
我需要以唯一的日期顺序获得运行总计(一个日期-此日期的值总和,下一个日期-下一个总和+上一个,依此类推)
我知道如何使用子查询执行此操作,但我想使用窗口函数:
有一个简单的查询:
SELECT f.date, SUM(f.price) OVER () FROM f GROUP BY f.date
它返回错误:
列f.price
必须出现在GROUP BY
子句中,或在聚合函数中使用
但我已经使用了聚合函数(SUM
)
谁能告诉我为什么会这样 尽量避免过度()
尽量避免过度
您正在混合使用窗口函数和聚合,这通常不是一个好主意。您之所以会出现错误,是因为实际上,聚合函数中没有使用列
f.price
(它用于窗口函数)
我相信下面的查询应该会给你你想要的。它使用一个窗口函数,并依赖于DISTINCT
而不是聚合
SELECT DISTINCT fdate, SUM(fprice) OVER(ORDER BY fdate) FROM f ORDER BY fdate;
:
考虑以下与您的规范相匹配的示例数据:
| fdate | fprice |
| ------------------------ | ------ |
| 2018-01-01T00:00:00.000Z | 1 |
| 2018-01-01T00:00:00.000Z | 2 |
| 2018-01-02T00:00:00.000Z | 3 |
| 2018-01-03T00:00:00.000Z | 4 |
| 2018-01-03T00:00:00.000Z | 1 |
查询将返回:
| fdate | sum |
| ------------------------ | --- |
| 2018-01-01T00:00:00.000Z | 3 |
| 2018-01-02T00:00:00.000Z | 6 |
| 2018-01-03T00:00:00.000Z | 11 |
您正在混合使用窗口函数和聚合,这通常不是一个好主意。您之所以会出现错误,是因为实际上,聚合函数中没有使用列
f.price
(它用于窗口函数)
我相信下面的查询应该会给你你想要的。它使用一个窗口函数,并依赖于DISTINCT
而不是聚合
SELECT DISTINCT fdate, SUM(fprice) OVER(ORDER BY fdate) FROM f ORDER BY fdate;
:
考虑以下与您的规范相匹配的示例数据:
| fdate | fprice |
| ------------------------ | ------ |
| 2018-01-01T00:00:00.000Z | 1 |
| 2018-01-01T00:00:00.000Z | 2 |
| 2018-01-02T00:00:00.000Z | 3 |
| 2018-01-03T00:00:00.000Z | 4 |
| 2018-01-03T00:00:00.000Z | 1 |
查询将返回:
| fdate | sum |
| ------------------------ | --- |
| 2018-01-01T00:00:00.000Z | 3 |
| 2018-01-02T00:00:00.000Z | 6 |
| 2018-01-03T00:00:00.000Z | 11 |
在这种情况下,我将获得一天的总和,而不将结果添加到第二天的结果中。我需要运行总计。您使用的是空的over。。尝试使用一个具有适当内容的over。。无论如何,错误iis似乎已解决。在这种情况下,我将获得一天的总和,而不将结果添加到第二天的结果中。我需要运行总计。您使用的是空的over。。尝试使用一个具有适当内容的over。。不管怎么说,错误似乎已经解决了。虽然这个答案是MySQL,但我认为您正在寻找的解决方案非常相似:3d anwer非常接近,但我有错误,他没有。虽然这个答案是MySQL,但我认为您正在寻找的解决方案非常相似:3d anwer非常接近,但我犯了错误,他没有。