Mysql 如何获取表中具有多个匹配行值的行数计数?
基本上我有一个SQL中的LoginHistory表。 我想执行一个命令,返回某个日期的登录次数。 但是如果一个用户已经登录多次,我只想将其记录为一次登录 所以我可以看到一天有多少人登录,而不是他们在那一天登录了多少次 到目前为止,我有这个Mysql 如何获取表中具有多个匹配行值的行数计数?,mysql,sql,Mysql,Sql,基本上我有一个SQL中的LoginHistory表。 我想执行一个命令,返回某个日期的登录次数。 但是如果一个用户已经登录多次,我只想将其记录为一次登录 所以我可以看到一天有多少人登录,而不是他们在那一天登录了多少次 到目前为止,我有这个 select count(username) as TotalUserCountOnTheDay from dbo.LoginHistory where datediff(day,LoginDate, '2014-11-19') = 0 但
select count(username) as TotalUserCountOnTheDay
from dbo.LoginHistory
where datediff(day,LoginDate, '2014-11-19') = 0
但这将返回登录用户或所有用户的数量。
结果是15行,应该是4行
我正在查询的表:
在这种情况下,distinct关键字可能对您有所帮助。请使用此关键字
select count(username) as TotalUserCountOnTheDay
from dbo.LoginHistory
where datediff(day,LoginDate, '2014-11-19') = 0
GROUP BY username;
或
您要统计不同的用户数:
您可以使用
分组依据
。前
SELECT COUNT(l.username) AS TotalUserCountOnTheDay
FROM dbo.LoginHistory AS l
WHERE DATEDIFF(day, l.LoginDate, '2014-11-19') = 0
GROUP BY l.username
或
它应该返回所选日期的每个用户名登录的计数。有趣的
count()
没有groupby
并且您仍然会得到多行?是的,上面显示的列“TotalUserCountOnTheDay”值15。请使用“username”分组只需在末尾添加一个group by子句作为group by username
,并确保username
在选择列表中。在上述示例中添加group by将返回四行,每行的值等于用户登录的次数。虽然此查询中的行数可以回答我的问题“这一天有多少用户登录”,但理想情况下,我只希望一行有一个值。(在本例中,4)您能提供语法吗?Thorsten Kettner就是这么做的
select count(distinct username) as TotalUserCountOnTheDay
from dbo.LoginHistory
where datediff(day,LoginDate, '2014-11-19') = 0;
SELECT COUNT(l.username) AS TotalUserCountOnTheDay
FROM dbo.LoginHistory AS l
WHERE DATEDIFF(day, l.LoginDate, '2014-11-19') = 0
GROUP BY l.username
SELECT COUNT(l.username) AS TotalUserCountOnTheDay
FROM dbo.LoginHistory AS l
WHERE l.LoginDate = '2014-11-19'
GROUP BY l.username