需要一个mysql语句在一个表中统计各个用户的记录数,及在指定时间后的记录数?

vvkl 2005-11-02 09:23:01
我想获得每个userid在所有记录数,及其在指定时间后的记录数,使用如下语句
获得所有记录数没问题,select userid,count(*) as count from user group by userid
结果
userid count
张三 5
李四 3
王五 3
赵六 6

但是指定时间后的记录数则只返回记录数大于0的
select userid,count(*) as count1 from user where addtime>11223344 group by userid
userid count1
张三 1
赵六 3
我想把为0的也显示出来该怎么办呢?最好是这个结果
userid count count1
张三 5 1
李四 3 0
王五 3 0
赵六 6 3
userid有很多,要不一条条的选就可以了。
...全文
261 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
helloyou0 2005-11-03
  • 打赏
  • 举报
回复
另一个方法,使用if函数
这个看起来简洁一点,不清楚什么版本开始可以用,
但是我觉得这个在大数据量的情况下速度不会太快。
上面那个虽然复杂,但是如果在name和num上分别有索引的情况下,速度不会太慢

SELECT id, num, name, sum( IF(num>50, 1, 0) )
FROM `c`
GROUP BY name
helloyou0 2005-11-03
  • 打赏
  • 举报
回复
照理userid有重复的话,应该分表存放比较好。那样就比较简单也快速。
======

我这边一个例子,懒得换成你的表了,反正都一样的结构
表c:
id num name
1 12 a
2 15 b
3 99 b
4 18 a
5 128 c
6 36 a

select x.name, y.*, count(y.name) from
(select distinct name from c) as x
left join
(select c.name,c.num,c.id from c where c.num>50 ) as y
on x.name=y.name
group by x.name


结果是:
name name num id count(y.name)
a NULL NULL NULL 0
b b 99 3 1
c c 128 5 1


当然前提是mysql4.1以上,支持这种子查询才行。
moodboy1982 2005-11-02
  • 打赏
  • 举报
回复
有事了,明天再来想。

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧