我有结果表:
date | user_id | content
-----------------------------------------
2017-01-14 | 1 | lorem
2017-01-02 | 2 | dsfdf
2017-01-02 | 1 | asfds dsfsda
2017-01-27 | 3 | sdfdfds fsdf
我想为所有用户计算行数并收到如下结果:
user_id | count
-----------------------------------------
1 | 2
2 | 1
3 | 1
我试试:
select distinct(user_id), count(*) from aso_repairs where date like '2017-01-%'
但这不起作用;-(任何帮助?
答案 0 :(得分:1)
使用GROUP BY子句:
SELECT
user_id,
count(user_id)
FROM aso_repairs
WHERE
date LIKE '2017-01-%'
GROUP BY user_id
你不应该使用count(*)
,至少在MySQL 3.23中,这比count(somecolumn)
贵得多,尽管它会产生相同的结果。
答案 1 :(得分:0)
按子句添加缺少的组:
SELECT
user_id, COUNT(*)
FROM
aso_repairs
WHERE
date LIKE '2017-01-%'
GROUP BY user_id;
此外,如果日期列中有一个索引,like
运算符将不允许您使用任何索引。考虑提供实际的日期边界:
SELECT
user_id, COUNT(*)
FROM
aso_repairs
WHERE
date BETWEEN '2017-01-01' AND '2017-01-31'
GROUP BY user_id;