我正在分析一所大学的登录记录数据库,并且我正在尝试编写一个查询,让我了解有多少用户正在使用实验室进行短期爆发,而不是长期停留。
我有下面的查询,它告诉我每个用户使用实验室的时间少于或等于 10 分钟的次数。我想要的是一个结果,告诉我这个和他们的登录总数。
select username, count(*) as "<= 10 min"
from logins
where duration<="600"
group by username
order by username asc
limit 10;
示例所需输出:
+----------+----------+----------+
| username | <=10 Min | total |
+----------+----------+----------+
| user1 | 4 | 7 |
| user2 | 11 | 22 |
| user3 | 1 | 3 |
| user4 | 4 | 8 |
+----------+----------+----------+
如果您想同时返回登录总数和少于 10 分钟的会话总数,那么您可以使用当前查询并进行一些小的更改来获得结果。
您可以在
where
CASE 表达式中移动子句过滤器,以获取少于 10 分钟的会话数。然后只需添加一秒钟count()
即可获得每个会话的总数username
。请参阅带有演示的 SQL Fiddle。您还可以使用 MySQL 速记
IF()
语法代替CASE
表达式:请参阅带有演示的 SQL Fiddle。两个查询都会给出结果: