Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何获取表中具有多个匹配行值的行数计数?_Mysql_Sql - Fatal编程技术网

Mysql 如何获取表中具有多个匹配行值的行数计数?

Mysql 如何获取表中具有多个匹配行值的行数计数?,mysql,sql,Mysql,Sql,基本上我有一个SQL中的LoginHistory表。 我想执行一个命令,返回某个日期的登录次数。 但是如果一个用户已经登录多次,我只想将其记录为一次登录 所以我可以看到一天有多少人登录,而不是他们在那一天登录了多少次 到目前为止,我有这个 select count(username) as TotalUserCountOnTheDay from dbo.LoginHistory where datediff(day,LoginDate, '2014-11-19') = 0 但

基本上我有一个SQL中的LoginHistory表。 我想执行一个命令,返回某个日期的登录次数。 但是如果一个用户已经登录多次,我只想将其记录为一次登录

所以我可以看到一天有多少人登录,而不是他们在那一天登录了多少次

到目前为止,我有这个

   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