我有一个跟踪用户创建的标签的表。我认为,这个问题的重要列是 user_id(创建标签的人)和 created_at。
通过一些搜索,我找到了如何使用 date_trunc 将 created_at 变成一天,以便我们可以按日期分组。
但是,我只能得到这个来给我一天的总标签数。我想做的是按用户和日期分组,这样我就可以看到每个用户每天创建了多少标签,并通过一些排序计算出用户一天中创建的标签数量最多。
我正在使用 postgres 9.1.6。
有什么帮助吗?提前致谢。
编辑:我开始的,主要是在黑暗中拍摄,是:
select user_id,
date_trunc('day', created_at) as "Day",
count(*) as "numtags"
from tags
group by user_id, created_at
order by numtags desc;
结果是:
user_id | Day | numtags
---------+---------------------+---------
1 | 2012-01-08 00:00:00 | 5719
1 | 2012-01-31 00:00:00 | 3239
1 | 2011-12-01 00:00:00 | 1868
1 | 2011-12-01 00:00:00 | 1772
1 | 2011-12-01 00:00:00 | 1756
很明显,分组没有按预期工作,用户 ID 都是相同的(我已手动确认它们不应该如此)。
我想看到类似的东西(上面的数字不匹配,只是一个例子):
user_id | Day | numtags
---------+---------------------+---------
1 | 2012-01-08 00:00:00 | 100
4 | 2012-01-31 00:00:00 | 90
1 | 2011-12-12 00:00:00 | 80
2 | 2011-12-12 00:00:00 | 77
2 | 2011-12-13 00:00:00 | 76
即同一个用户会出现很多次,同一个日期会出现很多次——事实上,只要用户在一天中至少做了一个标签,每个 user_id/Day 组合都会出现(每个一次),而 numtags 会显示有多少标签是该用户当天制作的。
最佳答案
正如我所建议的:
select user_id,
created_at::date as "Day",
count(*) as "numtags"
from tags
group by user_id, created_at::date
order by numtags desc;
created_at::date 正在将时间戳转换为日期类型。
您的错误是按 createdate 进行分组,这是具有不同时间部分的时间戳,但结果您截断了时间戳。
关于sql - 如何统计用户一天的标签数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13312585/