ORDER BY CASE & Ordinal 不工作
Posted
技术标签:
【中文标题】ORDER BY CASE & Ordinal 不工作【英文标题】:ORDER BY CASE & Ordinal not working 【发布时间】:2016-12-15 12:05:05 【问题描述】:以第 7 列排序为例 -
这段代码根本不对数据进行排序:
ORDER BY CASE WHEN '1'='2' THEN 5
WHEN '1'='1' THEN 7
ELSE 13 END
如果我将其更改为硬编码的序数,它会起作用:
ORDER BY 7
【问题讨论】:
'1' = '2' 等用于演示问题。它们实际上是真正的真/假表达式。 【参考方案1】:只要SELECT
列表中的各个表达式属于同一类型,就可以使用表达式本身来代替SELECT
列表编号:
SELECT expression1, expression2, ...
...
ORDER BY CASE
WHEN 1=2
THEN expression5
WHEN 1=1
THEN expression7
ELSE expression13
END;
如果数据类型不同,则使用类型转换进行季节调整。
您的查询不起作用,因为只有整数文字可以用作ORDER BY
中的列号。在所有其他情况下,整数仅代表其常量值。
如果不是这样,ORDER BY
表达式很容易变得模棱两可。请看以下内容:
... ORDER BY intcol + 3;
应该是“添加三个”还是“从SELECT
列表中添加第三个表达式”?
【讨论】:
那么大小写和序数组合实际上是不可能的吗?我确实可以使用完整的列表达式使其工作。 @JanineRawnsley:正确。 quote from the manual "每个表达式可以是输出列(SELECT 列表项)的名称或序号,或它可以是由输入列值形成的任意表达式 " 不可能,是的。我在答案中添加了解释。以上是关于ORDER BY CASE & Ordinal 不工作的主要内容,如果未能解决你的问题,请参考以下文章
sql [mysql:ORDER BY中的CASE]在mysql的ORDER BY中使用CASE。 #mysql #sql