如何通过SQL查询判断单列所有结果是否均为1并返回布尔值?
解决单列结果集统一判断的问题
嘿,我懂你的需求啦!你之前写的SQL语句是逐行检查每个status的值,所以会返回和结果行数一样多的true/false,但你要的是对整个结果集做统一判断——全是1就返回true,只要有一个2就返回false对吧?
这里有几个实用的解决方案,你可以根据场景选:
方法1:用MAX聚合函数判断最大值
利用MAX函数取status列的最大值:如果最大值是1,说明所有值都是1;只要有一个2,最大值就会是2。
SELECT CASE WHEN MAX(status) = 1 THEN 'true' ELSE 'false' END AS result FROM bd.items WHERE items.id = 33;
方法2:统计值为2的行数
通过统计status=2的记录数,要是数量为0就说明没有2,返回true;反之返回false:
SELECT CASE WHEN COUNT(CASE WHEN status = 2 THEN 1 END) = 0 THEN 'true' ELSE 'false' END AS result FROM bd.items WHERE items.id = 33;
方法3:用EXISTS(性能最优)
这个方法最适合大数据量的场景,因为它只要找到一条status=2的记录就会停止查询,不用遍历所有行:
SELECT CASE WHEN EXISTS(SELECT 1 FROM bd.items WHERE id=33 AND status=2) THEN 'false' ELSE 'true' END AS result;
这三种方法都能完美匹配你的测试场景:
- 结果为
{1,1,1}→ 返回true - 结果为
{1,2,1}→ 返回false - 结果为
{1}→ 返回true - 结果为
{2}→ 返回false
内容的提问来源于stack exchange,提问作者FerGuy
相关产品推荐
相关产品推荐

