查找具有多个唯一值的列

pgvzfuti  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(356)

我有一张table叫 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\u id的条目(例如134、135等),有时还有一些空条目。
在我的一些条目中-由于底层应用程序中的一个bug-在单个事件\u id中使用了两个唯一的蠕虫\u id(如事件\u id 1468036258-1426)。
我正在尝试构建一个查询,以便在单个事件id下有多个唯一的数字蠕虫id的情况下显示事件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         |
+-----------------+-----------------+
tmb3ates

tmb3ates1#

使用 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

演示
如果您想查看具有多个不同蠕虫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

演示

相关问题