gpt4 book ai didi

mysql - ORDER BY CASE 行为不正确

转载 作者:太空宇宙 更新时间:2023-11-03 12:00:21 25 4
gpt4 key购买 nike

我对 ORDER BY CASE 有一个困惑的问题:

我写了一个带有 VARCHAR(50) 参数“sortBy”的测试过程:

BEGIN

SELECT N.Num_Of_Users, N.Noun_Created FROM NOUNS N
ORDER BY CASE sortBy
WHEN 'numReviews' THEN Num_Of_Users
ELSE Noun_Created END DESC;
END

如果我用除 varchar 'numReviews' 之外的任何东西调用此过程,它会按预期按 Noun_Created 排序,但如果我用 'numReviews' 调用它,它根本不会排序。

对此感到困惑,我将排序硬编码为:

BEGIN
SELECT N.Num_Of_Users, N.Noun_Created FROM NOUNS N
ORDER BY Num_Of_Users;
END

并且排序正确。

最佳答案

我的猜测是 Num_Of_UsersNoun_Created 有不同的类型。因此,SQL 引擎最终进行了类型转换(通常为字符串)——而您得不到预期的结果。

这就是为什么在为 order by 设置键时最好使用单独的 case 语句的原因。试试这个:

ORDER BY (CASE WHEN sortBy = 'numReviews' THEN Num_Of_Users END),
(CASE WHEN sortBy = 'numReviews' THEN NULL ELSE Noun_Created END) DESC;

如果您只有一个选择,则不需要第二种case。你可以只使用:

ORDER BY (CASE WHEN sortBy = 'numReviews' THEN Num_Of_Users END),
Noun_Created

关于mysql - ORDER BY CASE 行为不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29578441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com