如何批量查询含多个唯一worm_id的event_id并聚合worm_id列表?
解决批量查询多worm_id的event_id需求
嘿,我来帮你搞定这个批量查询的问题!你需要找出所有在同一个event_id下存在多个不同非空worm_id的记录,并且把对应的worm_id用逗号拼接成列表,这个需求用MySQL的分组和聚合函数就能轻松实现。
最终查询语句
SELECT event_id, GROUP_CONCAT(DISTINCT worm_id ORDER BY worm_id SEPARATOR ',') AS worm_ids FROM fruits WHERE worm_id IS NOT NULL GROUP BY event_id HAVING COUNT(DISTINCT worm_id) > 1;
语句详解
让我们拆解一下这个查询的逻辑:
WHERE worm_id IS NOT NULL:先过滤掉worm_id为空的记录,因为我们只关心有实际值的worm_idGROUP BY event_id:将数据按event_id分组,这样我们可以单独处理每个事件下的worm_idHAVING COUNT(DISTINCT worm_id) > 1:筛选出那些分组内包含多个不同非空worm_id的event_id(COUNT(DISTINCT)确保我们统计的是唯一值,避免重复的worm_id干扰判断)GROUP_CONCAT(DISTINCT worm_id ...):把每个符合条件的分组里的唯一worm_id用逗号拼接成字符串,ORDER BY worm_id可以让列表按数字顺序排列,看起来更整齐
测试结果
用你的数据集测试这个语句,会得到你期望的输出:
+-----------------+-----------------+ | event_id | worm_ids | +-----------------+-----------------+ | 1468036258-1426 | 134,135 | +-----------------+-----------------+
这个查询会自动遍历所有event_id,批量找出所有符合条件的记录,不用再手动逐个查询啦!
内容的提问来源于stack exchange,提问作者Andrew White
相关产品推荐
相关产品推荐

