如何使用SQL对比同表同列多行数据并返回单个判断结果
单表同列多行值校验SQL实现
核心思路
遍历work表的status列,只要存在任意一行值不等于Accepted就返回0,所有行全为Accepted才返回1,最终输出单行单列表格。
通用兼容写法(支持MySQL、PostgreSQL、SQL Server、Oracle等所有主流数据库)
SELECT CASE WHEN COUNT(CASE WHEN status != 'Accepted' THEN 1 END) = 0 THEN 1 ELSE 0 END AS status FROM work;
逻辑说明
- 内层CASE语句只会给非
Accepted的行返回1,符合要求的行返回NULL,COUNT统计时会自动跳过NULL,最终统计的就是值不符合要求的总行数 - 外层CASE根据统计结果返回对应值:不符合的行数为0返回1,否则返回0
- 用提供的示例数据(两行值分别为Accepted、Declined)执行,会统计到1条不符合要求的记录,最终返回status=0,完全匹配预期。
部分数据库简化写法
- MySQL可直接用SUM+IF简化:
SELECT IF(SUM(status != 'Accepted') = 0, 1, 0) AS status FROM work;
- PostgreSQL可直接用布尔聚合函数:
SELECT BOOL_AND(status = 'Accepted')::INT AS status FROM work;
内容的提问来源于stack exchange,提问作者Deepika Gooty
相关产品推荐
相关产品推荐

