You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL语句在满足全部指定条件时返回1?

解决方案

你需要的是整体判断所有账户是否都满足各自条件,而非逐行检查单个账户。原CASE语句只处理了单条记录的情况,无法实现全局校验,以下是两种可行方案:

方案一:通过统计符合条件的行数判断

利用SUM和COUNT对比,确认所有行都满足对应条件:

SELECT 1
FROM hour_counts
HAVING COUNT(*) = SUM(
    CASE
        WHEN ACCOUNT = 'A' AND hour_count = 24 THEN 1
        WHEN ACCOUNT = 'B' AND hour_count = 24 THEN 1
        WHEN ACCOUNT = 'C' AND hour_count > 22 THEN 1
        WHEN ACCOUNT = 'D' AND hour_count > 22 THEN 1
        ELSE 0
    END
)
  • 逻辑:CASE给符合条件的行标记1,不符合的标记0;SUM结果等于总行数COUNT(*)时,说明所有账户都满足要求,此时返回1;若不满足则无结果返回。

方案二:通过不存在不符合条件的记录判断

用NOT EXISTS检查是否存在违规记录,无违规则返回1:

SELECT 1
WHERE NOT EXISTS (
    SELECT 1
    FROM hour_counts
    WHERE NOT (
        (ACCOUNT = 'A' AND hour_count = 24)
        OR (ACCOUNT = 'B' AND hour_count = 24)
        OR (ACCOUNT = 'C' AND hour_count > 22)
        OR (ACCOUNT = 'D' AND hour_count > 22)
    )
)
  • 逻辑:子查询筛选出所有不满足条件的账户,若不存在这类账户(NOT EXISTS),则返回1。

补充:需要返回0的场景

如果要求不满足条件时返回0而非无结果,可调整语句:

SELECT 
    CASE
        WHEN COUNT(*) = SUM(
            CASE
                WHEN ACCOUNT = 'A' AND hour_count = 24 THEN 1
                WHEN ACCOUNT = 'B' AND hour_count = 24 THEN 1
                WHEN ACCOUNT = 'C' AND hour_count > 22 THEN 1
                WHEN ACCOUNT = 'D' AND hour_count > 22 THEN 1
                ELSE 0
            END
        ) THEN 1
        ELSE 0
    END AS check_result
FROM hour_counts

内容的提问来源于stack exchange,提问作者x89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:20:32