sql - 按一列分组并对其他列求和

标签 sql postgresql

我这是一个查询

SELECT * FROM user_state_logs WHERE user_state_logs.user_id = 1
AND created_at BETWEEN '2015-05-03 11:06:05' AND '2015-05-13 11:06:05'

返回这个

user_id   state   duration
1         call    10
1         call    20
1         wait    30
1         call    10
1         wait    20

我想返回

user_id   state   duration
1         call    40
1         wait    50

我尝试添加GROUP BY user_state_logs.state

但我收到此错误

ERROR: column "user_state_logs.user_id" must appear in the GROUP BY clause or be used in an aggregate function

有两个问题:

为什么我会收到此错误?

如何让查询以第二种格式返回数据?

最佳答案

尝试这样做:

SELECT user_state_logs.state, user_state_logs.user_id, sum(user_state_logs.duration)  as duration
FROM user_state_logs 
WHERE user_state_logs.user_id = 1
AND created_at BETWEEN '2015-05-03 11:06:05' AND '2015-05-13 11:06:05'
GROUP BY user_state_logs.state, user_state_logs.user_id

关于sql - 按一列分组并对其他列求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30214747/

相关文章:

sql - SSRS 显示 2 个不同的细节

mysql - 从订阅列表中如何获取仅订阅英语 channel 的用户

sql - PostgreSQL 从 jsonb 对象中获取任何值

mysql - 在mysql中的单个查询中更新两个表

sql - 在数据库中存储现实世界 "events"的最佳方式?

mysql - 为什么这个 mysql 查询不起作用?

sql - SeaORM 外键约束中引用的列 "owner_id"不存在

ruby-on-rails - 仅将 JSON curl 请求的值保存到 RoR 中的 PG 数据库

postgresql - 在表中保留一定数量的记录

c - PostgreSQL:在 Windows 8 64 位上编译 C 函数