通过分组和聚合来消除记录
P粉731861241
P粉731861241 2023-08-17 19:20:03
[MySQL讨论组]

我有一个临时表,内容如下:

playlist_id |   item_id  |    passed
-----------------------------------------
 123        |   111      |    true
 123        |   111      |    false
 123        |   111      |    true
 123        |   112      |    true
 456        |   212      |    false
 789        |   212      |    true

我需要缩减结果,如果对于一个playlist_id, item_id,只有当所有的passed值都为true时,我才需要保留,所以在这个例子中,我想要的结果是:

playlist_id |   item_id  |    passed
-----------------------------------------
 123        |   112      |    true
 789        |   212      |    true

因为第二条记录的playlist_id, item_id对有一个false值,所以整个对应组需要被删除。 我尝试使用group byhaving,所以查询如下:

select 
  playlist, 
  item_id
from 
  temp table
group by
  playlist_id,
  item_id
having passed = true

但是这给我返回了所有至少有一个true值的对。

我该如何消除所有playlist_id, item_id记录,如果其中任何一个布尔类型的passed字段为false呢?

谢谢!

P粉731861241
P粉731861241

全部回复(1)
P粉245003607

您需要在HAVING中使用聚合值。否则,您只是在每个组中测试一个随机行。

使用MIN(passed)来获取每个组中passed的最小值。如果所有值都是true,则为1;如果存在任何false值,则为0

SELECT playlist, item_id
FROM temp_table
GROUP BY playlist, item_id
HAVING MIN(passed) = true
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号