Estou tentando descobrir quantas vezes em meu banco de dados ocorreu um agrupamento específico. Eu tenho duas tabelas relevantes.
mysql> describe logins;
+-------------+-------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(10) | NO | MUL | | |
| login_time | datetime | NO | MUL | 0000-00-00 00:00:00 | |
| logout_time | datetime | YES | | NULL | |
| duration | int(11) | YES | | NULL | |
| location | varchar(15) | YES | MUL | NULL | |
+-------------+-------------+------+-----+---------------------+----------------+
e
mysql> describe login_apps;
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| sid | int(11) | YES | | NULL | |
| programName | varchar(63) | YES | | NULL | |
| duration | int(11) | YES | | NULL | |
+-------------+-------------+------+-----+---------+----------------+
Digamos que eu queira saber quais aplicativos foram usados em uma determinada sessão. Eu posso usar:
mysql> select distinct programName from login_apps where sid="35" and programName!="NULL";
+--------------------+
| programName |
+--------------------+
| Acrobat Distiller |
| FireFox |
| Minitab 16 |
+--------------------+
para obter os nomes de programas distintos, mas estou interessado em saber com que frequência determinados grupos de aplicativos são usados em uma determinada sessão. Então, basicamente, com que frequência esses três aplicativos são agrupados. Existe uma maneira que pode me obter resultados na forma de
application x-y-z, 12
application x-z, 9
application y-z, 7
Posso oferecer como lidaria com isso no MS SQL, usando
PIVOT
eROW_NUMBER()
. Eles não parecem existir no MySQL (talvez a versão mais recente os tenha adicionado?), então temo que não seja útil para você. Talvez alguém mais familiarizado com o MySQL possa usar isso para ajudar a chegar a uma solução.Parece trapaça usar a
GROUP_CONCAT()
função: