SUM 值按列分组,但不能“聚合”?

Posted

技术标签:

【中文标题】SUM 值按列分组,但不能“聚合”?【英文标题】:SUM value group by columns but do not 'aggregate' possible? 【发布时间】:2019-04-23 09:49:07 【问题描述】:

我想根据 2 个不同的值来总结达到阈值的次数:日期和项目。

Redshift 给我一个错误,要求在 group by 中添加更多列(我不希望在 group by 中:“列必须出现在 group by 子句中或用于聚合函数中”)。

会出现的另一个问题是代码会聚合我的列,我想复制 SUM 数字。

我有什么

|------------|--------|------------|
| item_type  | date   |thresh_rchd |
|------------|--------|------------|
|    baby    |monday  |      2     |
|------------|--------|------------|
|    tom     |monday  |      6     |
|------------|--------|------------|
|    baby    |monday  |      8     |
|------------|--------|------------|
|    baby    |tuesday |      4     |
|------------|--------|------------|

我想要什么:

|------------|--------|------------|-------------|
| item_type  | date   |thresh_rchd |total thresh |
|------------|--------|------------|-------------|
|    baby    |monday  |      2     |     10      |
|------------|--------|------------|-------------|
|    tom     |monday  |      6     |      6      |
|------------|--------|------------|-------------|
|    baby    |monday  |      8     |     10      |
|------------|--------|------------|-------------|
|    baby    |tuesday |      4     |      4      |
|------------|--------|------------|-------------|

【问题讨论】:

【参考方案1】:

你可以试试下面的窗口函数

select item_type, date, thresh_rchd, 
       sum(thresh_rchd) over(partition by item_type, date) as total_thresh
from tablename

【讨论】:

似乎运行良好!当 group by 不削减它时,将继续使用并分区!谢谢【参考方案2】:
select t1.item_type,t1.date,t1.thresh_rchd,t2.total
from <table> t1
inner join
(
select item_type,date,sum(thresh_rchd) total from <table>
group by item_type,date) t2
on t1.item_type=t2.item_type
and t1.date=t2.date

【讨论】:

以上是关于SUM 值按列分组,但不能“聚合”?的主要内容,如果未能解决你的问题,请参考以下文章

如何按列分组并聚合其余列

如何在 Hive 中按列分组使用聚合函数

Power Query M - 使用自定义聚合(百分位)按列值分组

SQL:如何按列分组而不爆炸表中的聚合值

SQL sum 按列分组,包括与从属相同的表的行

使用pandas按列分组,然后根据条件新建一列