我有一个临时表,内容如下:
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 by和having,所以查询如下:
select playlist, item_id from temp table group by playlist_id, item_id having passed = true
但是这给我返回了所有至少有一个true值的对。
我该如何消除所有playlist_id, item_id记录,如果其中任何一个布尔类型的passed字段为false呢?
谢谢!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
您需要在
HAVING中使用聚合值。否则,您只是在每个组中测试一个随机行。使用
MIN(passed)来获取每个组中passed的最小值。如果所有值都是true,则为1;如果存在任何false值,则为0。