我有一个日志表,其中列出了系统的各种操作,包括用户登录。我想了解每天有多少唯一用户登录。
我在这里试过这个:
SELECT date, count(username)
FROM universal_log
WHERE (plugin,action)
IN (('system','login'))
GROUP BY date
ORDER BY date
然而,这给了我登录的人数,还计算了每个用户的所有多次登录。我认为这是因为我没有按用户名分组。但是,如果我在这里这样做:
SELECT date, count(username)
FROM universal_log
WHERE (plugin,action)
IN (('system','login'))
GROUP BY date, username
ORDER BY date
我得到一个表格,每个日期有多个条目而不是一个条目,其中包含当天每个用户登录的频率。
无论他当天登录的频率如何,我如何才能为每个用户每天登录时计数 +1?
最佳答案
使用 COUNT(DISTINCT username)
应用于您的第一个查询时应该为您解决重复问题。您只对 GROUP BY date
是正确的,但只需要对 username
值进行重复数据删除。
SELECT
date,
count(DISTINCT username)
FROM universal_log
WHERE (plugin,action)
IN (('system','login'))
GROUP BY date
ORDER BY date
当您在第二次尝试中将 username
添加到 GROUP BY
时,效果是根据 应用
,每个 COUNT()
>dateusername
,这在语义上与您想要的不同。对于添加到 GROUP BY
的每一列,您的聚合最终将生成更多 行(应用于更广泛的数据集)或在某些情况下生成相同的行(如果值一开始都是不同的)。
关于mysql - 如何统计一个表每天有多少个人用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21386928/