首页 > 解决方案 > 分组案例/何时优先级始终是最后一个案例?

问题描述

如果您在 CASE 语句中有一个满足多个 WHEN 的参数,无论查询顺序如何,第一个满足条件的 THEN 是否总是交付而其余的比较被忽略?换句话说,结构中的每个进一步的 WHEN 子句是否等效于 ELSEIF 三元组?根据随机结果顺序,是否有例外?

CREATE TABLE test (non_unique_id INT(11) UNSIGNED, a BOOL, b BOOL);
INSERT INTO test VALUES(1,0,1),(1,1,0),(2,0,1);
SELECT non_unique_id, 
    CASE 
        WHEN MAX(a=1) THEN 'a' 
        WHEN MAX(b=1) THEN 'b' 
    END AS ttype 
FROM test GROUP BY non_unique_id;

退货

non_unique_id   ttype
1               a
2               b

这就是预期的结果。我的问题是,在这些条件下,CASE/WHEN 是否可以有效地用作在分组之前可靠地订购子查询的一种方式。

标签: mysql

解决方案


尚不完全清楚您要问什么,但我感觉到您担心该MAX函数可能会遇到 eg a=1,然后 report 'a'然后再检查列的其余部分以查看是否有a=2某个地方。

据我所知,SQL 中的聚合函数必须检查每个组的所有记录(或整个表,如果GROUP BY未使用)。例外情况可能是数据库可以使用索引,这样就不需要检查所有记录。但即使在索引的情况下,数据库也只会在可以确定没有必要检查所有记录的情况下避免检查所有记录。


推荐阅读