我试图找出在我的数据库中特定分组发生了多少次。我有两个相关的表。
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 | |
+-------------+-------------+------+-----+---------------------+----------------+
和
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 | |
+-------------+-------------+------+-----+---------+----------------+
假设我想知道给定会话中使用了哪些应用程序。我可以用:
mysql> select distinct programName from login_apps where sid="35" and programName!="NULL";
+--------------------+
| programName |
+--------------------+
| Acrobat Distiller |
| FireFox |
| Minitab 16 |
+--------------------+
获取不同的程序名称,但我感兴趣的是特定应用程序组在给定会话中的使用频率。因此,从本质上讲,这三个应用程序多久被组合在一起。有没有一种方法可以让我以以下形式获得结果
application x-y-z, 12
application x-z, 9
application y-z, 7
我可以提供我将如何在 MS SQL 中使用
PIVOT
和处理它ROW_NUMBER()
。这些在 MySQL 中似乎不存在(也许最新版本已经添加了它们?),所以恐怕对您没有帮助。也许更熟悉 MySQL 的人可以使用它来帮助找到解决方案。使用
GROUP_CONCAT()
函数感觉就像作弊: