Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 栏「;f、 价格“;必须出现在GROUP BY子句中或在聚合函数中使用,但I';我已经使用了窗口功能_Sql_Postgresql - Fatal编程技术网

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非常接近,但我犯了错误,他没有。