这是一个示例数据库提取,因为我认为我没有让自己清楚。一个更改包含多行。我想把它视为一个例子。
+----+---------+---------------------+
| id | user_id | created_at |
+----+---------+---------------------+
| 1 | 2 | 2013-10-30 12:47:04 |
| 2 | 2 | 2013-10-30 12:47:04 |
| 3 | 2 | 2013-10-30 12:47:04 |
| 4 | 2 | 2013-10-30 16:38:30 |
| 5 | 2 | 2013-10-30 16:38:30 |
| 6 | 2 | 2013-10-30 16:38:30 |
| 7 | 4 | 2013-10-30 20:49:40 |
+----+---------+---------------------+
我想要的输出是
user_id |计数
2个| 2个
4 | 1
因为user_id 2有两个基于created_at的编辑块,而用户3有一个。
---上一篇文章---
我有一个包含要编辑的记录的表。它对表单的每次更改都有一个新行,一旦更新,它将针对更改的每一行保存更新的时间戳。它还为更换器保存user_id
。
我想计算每个用户的整个修改次数。
为了做到这一点,我想我需要按时间戳进行分组(对于编辑而言,不可能同时有两个进入)然后计算用户ID的出现次数。我无法让它发挥作用。
有什么想法吗?
答案 0 :(得分:2)
如果您想计算用户的编辑次数,您应按用户ID分组,如:
select count(occurence) from tableName group by userId
这将从表中获取整个时间范围内的所有用户。
对于特定用户或特定时间段,您可以在where子句中提及。
如果您按时间戳分组,那么您将获得在该特定时间进行的所有编辑。
如果您按时间戳+用户分组,那么它将按用户的方式提供当时所做的所有编辑。
答案 1 :(得分:0)
您可以GROUP BY
这样使用更多字段:
GROUP BY user_id, timestamp
答案 2 :(得分:0)
我想我拥有它。它需要一个子查询。
MariaDB [dartmoor]> select user_id,count(user_id)from(select user_id,created_at from revisions group by created_at)by user_id;
+---------+----------------+
| user_id | count(user_id) |
+---------+----------------+
| 2 | 199 |
| 3 | 2 |
| 4 | 1 |
+---------+----------------+
3 rows in set (0.00 sec)
答案 3 :(得分:0)
我想你想要:
SELECT user_id, COUNT(DISTINCT created_at) AS count
FROM revisions
GROUP BY user_id ;