Estou analisando um banco de dados de registros de login para uma universidade e estou tentando escrever uma consulta que me dê uma ideia de quantos usuários estão usando os laboratórios para períodos curtos, em vez de uma estadia mais longa.
Eu tenho a consulta abaixo da consulta, que me diz quantas vezes cada usuário usou um laboratório por menos ou igual a 10 minutos. O que eu quero é um resultado que me diga isso e o número total de logins.
select username, count(*) as "<= 10 min"
from logins
where duration<="600"
group by username
order by username asc
limit 10;
Exemplo de saída desejada:
+----------+----------+----------+
| username | <=10 Min | total |
+----------+----------+----------+
| user1 | 4 | 7 |
| user2 | 11 | 22 |
| user3 | 1 | 3 |
| user4 | 4 | 8 |
+----------+----------+----------+
Se você quiser retornar o número total de logins e o número total de sessões com menos de 10 minutos, poderá obter o resultado usando sua consulta atual com algumas pequenas alterações.
Você pode mover o
where
filtro de cláusula dentro de uma expressão CASE para obter a contagem das sessões com menos de 10 minutos. Em seguida, basta adicionar um segundocount()
para obter o número total de sessões para cada umusername
.Consulte SQL Fiddle com demonstração . Você também pode usar a sintaxe abreviada do MySQL
IF()
em vez daCASE
expressão:Consulte SQL Fiddle com demonstração . Ambas as consultas darão um resultado: