【问题标题】:SQL count and group only returns first row for each groupSQL 计数和组只返回每个组的第一行
【发布时间】:2020-04-30 19:07:29
【问题描述】:

我的桌子:

+----------+---------------------+  
| bonus_id | created             |  
+----------+---------------------+  
|  11      | 2020-04-28 19:50:13 |  
|  12      | 2020-04-29 00:00:00 |  
|  13      | 2020-04-30 19:55:58 |  
|  14      | 2020-04-29 19:56:07 |  
|  15      | 2020-04-30 19:56:18 |  
|  16      | 2020-04-29 20:16:21 |  
+----------+---------------------+  

这就是我试图得到的

2020-04-30 - Count: 2
13
15
2020-04-29 - Count: 3
12
14
16
2020-04-28 - Count: 1
11

这就是我得到的:

2020-04-30 - Count: 2
13
2020-04-29 - Count: 3
12
2020-04-28 - Count: 1
11

我的代码:

SELECT DATE(created) as created, COUNT(*) as count, bonus_id FROM test WHERE account_id=? AND user_id=? GROUP BY DATE(created) DESC

当我使用 ORDER BY 而不是 GROUP/COUNT 时,我得到了所有输出的正确顺序,但是我没有得到计数。不明白为什么我只得到每个日期的第一行。

【问题讨论】:

  • 您的查询已损坏。 bonus_id 未聚合且不在 GROUP BY 中。在任何合理的数据库中,都会出现语法错误。使用您正在使用的数据库进行标记。

标签: php sql


【解决方案1】:

如果你想为每一行添加一个包含计数的列,请使用窗口函数:

select t.*, count(*) over (partition by date(created)) as day_cnt
from test t;

如果您想要一个聚合列表,那么我假设您使用的是 MySQL(旧版本)或 SQLite,因为它们不会产生语法错误。在这种情况下,您可以使用group_concat()

select date(created), count(*), group_concat(bonus_id) as bonus_ids
from test
group by date(created);

【讨论】:

  • 是的。奇怪的是那个错误。获得版本 MariaDB 10.4.10。无论如何,感谢您的帮助。
猜你喜欢
  • 2011-11-05
  • 2016-01-14
  • 2021-08-22
  • 1970-01-01
  • 2014-12-14
  • 2012-01-01
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多