SQLite CASE WHEN >= 评估

SQLite CASE WHEN with >= evaluation

我正在编写一个脚本,用于计算名为 Agricola 的棋盘游戏的分数。以下查询有效:

SELECT
CASE $Fields WHEN 0 THEN -1
             WHEN 1 THEN -1
             WHEN 2 THEN 1
             WHEN 3 THEN 2
             WHEN 4 THEN 3             
END
;

以下查询将不起作用:

SELECT
CASE $Fields WHEN 0 THEN -1
             WHEN 1 THEN -1
             WHEN 2 THEN 1
             WHEN 3 THEN 2
             WHEN 4 THEN 3
             WHEN >= 5 THEN 4
END
;

我得到的只是一条消息,本质上是 "error near '>=': syntax error"。我如何在此 CASE 语句中表示此 WHEN >= 5 块?

CASE x 只会计算单个值,你需要 CASE WHEN x ...,像这样:

SELECT CASE
         WHEN $Fields >= 5 THEN 4
         WHEN $Fields = 4 THEN 3
         -- so on
       END

如果您使用 CASE 表达式的替代形式,您可以使用不等式:

SELECT
    CASE WHEN $Fields = 0 THEN -1
         WHEN $Fields = 1 THEN -1
         WHEN $Fields = 2 THEN 1
         WHEN $Fields = 3 THEN 2
         WHEN $Fields = 4 THEN 3
         WHEN $Fields >= 5 THEN 4
    END;

如果您想继续使用您的 CASE 形式,这里的一种选择是将 $Fields >= 5 情况放入 ELSE 条件中。这将假设 $Fields 永远不会为负。假设是这样,您可以尝试:

SELECT
    CASE $Fields WHEN 0 THEN -1
                 WHEN 1 THEN -1
                 WHEN 2 THEN 1
                 WHEN 3 THEN 2
                 WHEN 4 THEN 3
                 ELSE 4
    END;