我有一个名为fruits
的表,如下所示:
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| worm_id | int(11) | YES | MUL | NULL | |
| event_id | varchar(15) | YES | | NULL | |
+-----------------+--------------+------+-----+---------+----------------+
表中的值如下所示:
+----------+-------------+-----------------+
| id | worm_id | event_id |
+----------+-------------+-----------------+
| 12 | 134 | 1468036258-1426 |
| 13 | 134 | 1468036258-1426 |
| 14 | 134 | 1468036258-1426 |
| 15 | NULL | 1468036258-1426 |
| 16 | 135 | 1468036258-1426 |
| 17 | 135 | 1468036258-1426 |
| 18 | 135 | 1468036258-1426 |
| 19 | NULL | 1468036258-1426 |
| 20 | 134 | 1468102511-5892 |
| 21 | 134 | 1468102511-5892 |
| 22 | NULL | 1468102511-5892 |
| 23 | 136 | 1468228612-9272 |
| 24 | 136 | 1468228612-9272 |
| 25 | NULL | 1468228612-9272 |
+----------+-------------+-----------------+
在每个事件ID下,可能有许多带有单个worm_id的条目(例如134,135等),有时还有一些空条目。
在我的一些条目中 - 由于底层应用程序中的错误 - 在一个event_id中使用了两个唯一的worm_id(如event_id 1468036258-1426)。
我正在尝试构建一个查询,以便在方案中显示一个event_id列表,在单个event_id下有多个唯一的数字worm_id。
这是我到目前为止所提出的:
SELECT DISTINCT(worm_id), event_id FROM `fruits`
WHERE worm_id IS NOT NULL
AND event_id = '1468036258-1426'
ORDER BY event_id DESC
返回以下结果:
+-------------+-----------------+
| worm_id | event_id |
+-------------+-----------------+
| 134 | 1468036258-1426 |
| 135 | 1468036258-1426 |
+-------------+-----------------+
我想大规模地执行此操作并返回如下所示的结果:
+-----------------+-----------------+
| event_id | worm_ids |
+-----------------+-----------------+
| 1468036258-1426 | 134,135 |
+-----------------+-----------------+
答案 0 :(得分:1)
使用group_concat
SELECT
GROUP_CONCAT(DISTINCT worm_id) AS worm_ids,
event_id
FROM
`fruits`
WHERE worm_id IS NOT NULL
AND event_id = '1468036258-1426'
要查看所有事件的蠕虫ID,您需要按事件ID
对数据进行分组SELECT
GROUP_CONCAT(DISTINCT worm_id) AS worm_ids,
event_id
FROM
`fruits`
WHERE worm_id IS NOT NULL
GROUP BY event_id
如果要查看具有1个以上不同蠕虫ID的所有事件,您还可以对聚合结果集应用过滤器
SELECT
GROUP_CONCAT(DISTINCT worm_id) AS worm_ids,
event_id
FROM
`fruits`
WHERE worm_id IS NOT NULL
GROUP BY event_id
HAVING COUNT(DISTINCT worm_id) > 1