首页 > 解决方案 > 将具有相同 ID 但具有条件的不同事件日志的行汇总在一起

问题描述

一个表有 3 个不同的字段,第一个是user_id, event_log, uploaded_files

user_id       event_log       uploaded_files
--------------------------------------------
1             0001            1
1             0002            1
1             0003            1
2             0004            5
2             0005            2
2             0006            1
3             0007            1
3             0008            4

我的目标是将 user_id 行合并为一个并汇总 upload_files 列,同时实现诸如total files > 1 and <6. 理想情况下,我想要这样:

user_id       total_files
--------------------------
1             3
3             5

到目前为止,我只能到达:

user_id       total_files
--------------------------
1             3
2             8
3             5

我已经通过使用到达那里:

SELECT user_id, sum(files_uploaded) total_files
FROM my_table
GROUP BY user_id
ORDER BY user_id;

我试图添加条件:ORDER BY user_id WHERE total_files >1 AND total_files <6,但我不能。有什么我想念的吗?

标签: sqlsql-servergroup-by

解决方案


您不能在WHERE子句中使用聚合表达式;为此,您需要使用以下HAVING子句:

SELECT user_id, sum(files_uploaded) total_files
FROM my_table
GROUP BY user_id
HAVING SUM(files_uploaded) > 1 AND SUM(files_uploaded) < 6
ORDER BY user_id;

DB Fiddle 上的演示

用户 ID | total_files
------: | ----------:
      1 | 3
      3 | 5

推荐阅读