Group By 的基本 SQL 问题(在 Netezza 中)

Posted

技术标签:

【中文标题】Group By 的基本 SQL 问题(在 Netezza 中)【英文标题】:Basic SQL question for Group By (in Netezza) 【发布时间】:2020-04-21 21:01:42 【问题描述】:

这听起来可能很愚蠢,但我在 Netezza 中的 Group By 的 SQL 代码中遇到了问题,我似乎无法弄清楚。基本上,我正在做简单的求和并试图对结果进行分组,这就是我遇到问题的地方。当前表如下所示:

id      date     daily_count
---------------------------
1      4/1/20        2
1      4/2/20        1
2      4/1/20        3
2      4/1/20        2
2      4/3/20        1 

我想让它看起来像:

id      date     daily_count
---------------------------
1      4/1/20        2
1      4/2/20        1
2      4/1/20        5
2      4/3/20        1 

我的选择语句是:

select id, date, sum(count) over (partition by date, id) as daily_count

如果我执行包含 sum 字段 (group by id, date, daily_count) 的 group by 子句,我会收到警告:

GROUP BY 子句中不允许使用窗口聚合

但如果我在 group by 子句 (group by id, date) 中排除 sum 字段,则会收到警告:

属性count 必须在聚合函数中进行分组或使用

count 是我要求和的变量,所以如果我对它进行分组,它不会产生正确的总和。

这是否意味着必须在此查询之外进行分组,即 cte 或子查询?我希望得到一些建议,以了解究竟发生了什么以及最佳行动方案是什么。

【问题讨论】:

【参考方案1】:

您想要简单的聚合而不是窗口函数:

select id, date, sum(daily_count) daily_count
from mytable
group by id, date

【讨论】:

【参考方案2】:

你似乎只是想要聚合:

select id, date, sum(count) as daily_count
from t
group by id, date;

我不确定你为什么要在这里使用窗口函数。

【讨论】:

以上是关于Group By 的基本 SQL 问题(在 Netezza 中)的主要内容,如果未能解决你的问题,请参考以下文章

mysql中group by里面的问题

Hive mapreduce SQL实现原理——SQL最终分解为MR任务,而group by在MR里和单词统计MR没有区别了

asp.net core 3.0 新手问题:如何这段带“count” 和 group by的sql代码,怎么转成 linq的写法?

SQL Group By和窗口函数

GROUP BY 和 ORDER BY一起使用时,要注意的问题!

sql语句有关where,group by,having的问题