分组的案例/何时优先总是总是优先于最后一个案例?

时间:2019-04-12 05:12:39

标签: mysql

如果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用作在可靠分组之前对子查询进行排序的一种方式。

1 个答案:

答案 0 :(得分:1)

尚不清楚您要问什么,但我觉得您担心MAX函数可能会遇到例如a=1,然后报告'a'之前检查该列的其余部分,以查看某处是否有a=2

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