mysql - 如何统计一个表每天有多少个人用户?

标签 mysql group-by

我有一个日志表,其中列出了系统的各种操作,包括用户登录。我想了解每天有多少唯一用户登录。

我在这里试过这个:

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() >date,每个 username,这在语义上与您想要的不同。对于添加到 GROUP BY 的每一列,您的聚合最终将生成更多 行(应用于更广泛的数据集)或在某些情况下生成相同的行(如果值一开始都是不同的)。

关于mysql - 如何统计一个表每天有多少个人用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21386928/

相关文章:

mysql - 使用 WHM vps 在服务器上设置 max_allowed_pa​​cket

mysql - MariaDB 帐户可以对数据库进行本地和远程访问吗?

mysql - 对嵌套 SQL Oracle 查询中的多行值求和

mysql - 将垂直表转换为水平表

php - MYSQL 多重计数和求和

sql-server - 如何从sql中的With子句(cte)分组得到结果

java - 每月更新一条数据库记录

MySQL 删除 Left Join 上的重复列,3 个表

python - 使用分组依据并创建 CSV

mysql存储过程输入参数值