Mysql 分组案例/优先级是否总是从第一个案例到最后一个案例?

Mysql 分组案例/优先级是否总是从第一个案例到最后一个案例?,mysql,Mysql,如果您有一个参数在CASE语句中满足多个条件,而不管查询顺序如何,那么满足条件的第一个参数是否始终被传递,其余的比较是否被忽略?换句话说,结构中的每个进一步WHEN子句是否等同于ELSEIF三元根据随机结果顺序,是否有例外情况? 返回 non_unique_id ttype 1 a 2 b 这是预期的结果。我的问题是,在这些条件下,CASE/WHEN是否可以有效地作为在分组之前可靠地排序子查询的一种方法。您所问的问题并不完全清楚,但我

如果您有一个参数在CASE语句中满足多个条件,而不管查询顺序如何,那么满足条件的第一个参数是否始终被传递,其余的比较是否被忽略?换句话说,结构中的每个进一步WHEN子句是否等同于ELSEIF三元根据随机结果顺序,是否有例外情况?

返回

non_unique_id   ttype
1               a
2               b

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

您所问的问题并不完全清楚,但我感觉到您担心的是,
MAX
函数可能会遇到例如
a=1
,然后报告
'a'
,在检查列的其余部分之前,查看是否有
a=2


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

谢谢。是的,这基本上是问题的一半。如果组函数是MIN(a=1)而不是MAX,并且它达到了1,它会终止并忽略列的其余部分吗。。。?问题的另一半(可能更基本)是CASE/WHEN是否按从左到右的顺序可靠地返回…即。如果较早的时间满足不同条件,则满足某些条件的较晚时间将永远不会遇到。@joshstrike
CASE
将在匹配的第一个条件下短路。所以,如果你碰巧有两个匹配的条件,无论哪一个出现得更早,都会触发。
non_unique_id   ttype
1               a
2               b