MySQL - 如何通过单个查询获取两列中的行数?



我有以下数据:

| user_id | item_id |
|---------+---------|
|    3    |     2   |
|    3    |    11   |
|    4    |     1   |
|    4    |     2   |
|    4    |    55   |
|    4    |     3   |
|    5    |     9   |

其中item_id在同一user_id中是不同的,但它可能是重复的(请参阅user_id= 3 和user_id= 4 都有item_id= 2(。我想做的是,将这些列聚合为"每user_iditem_id行数"(,如下所示:

| user_id | count(`item_id`) |
|---------+------------------|
|    3    |         2        |
|    4    |         4        |
|    5    |         1        |

目前,我天真地通过外部逻辑来执行此操作,该逻辑在每个user_id上都执行SELECT COUNT(item_id) WHERE user_id='${user_id}'。正如您所料,当user_id增加时,情况会变得更糟。

如何编写单个 SQL 查询来实现此目的?请帮助我。提前谢谢。

尝试下面的计数聚合: 当您使用分组依据user_id时,它会为您提供用户 ID 明智的计数

select user_id, count(item_id)
from tablename
group by user_id

您可以使用countGROUP BY子句来获得所需的结果

例如

SELECT user_id, count(item_id)
FROM table_name
GROUP BY user_id

最新更新