若SQL语句中的ORDER BY短语中指定了多个字段,则( )。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了若SQL语句中的ORDER BY短语中指定了多个字段,则( )。相关的知识,希望对你有一定的参考价值。

A)依次按自右至左的字段顺序排序 B)只按第一个字段排序
C)依次按自左至右的字段顺序排序 D)无法排序

ORDER BY 中可以指定多个字段排序,还可以定义每个字段的排序方法.可以第一个升序,第二个降序,第三个升序,第四个降序等等.
order by的排序是从左到右的.
所以要选C
参考技术A C 如果每个排序字段不声明,则默认升序排列 参考技术B 用逗号隔开 C 参考技术C 先按第一个排,以此类推 参考技术D c

如果在 select 中指定了大写,则 Order by 子句失败

【中文标题】如果在 select 中指定了大写,则 Order by 子句失败【英文标题】:Order by clause fails if upper case specified in select 【发布时间】:2016-11-15 23:54:04 【问题描述】:

我有一个类似的查询:

SELECT DISTINCT UPPER(LEFT(title, 1)) as title
 FROM <table_name>
 ORDER BY LEFT(title, 1);

失败并出现错误

#3065 - ORDER BY 子句的表达式 #1 不在 SELECT 列表中,引用列 'title' 不在 SELECT 列表中;这与 DISTINCT 不兼容

当使用 UPPER 按顺序按 ORDER BY UPPER(LEFT(title, 1)); 时,这可以正常工作

我想知道为什么它之前会失败,因为默认情况下 order by 不区分大小写我猜这里提到http://dev.mysql.com/doc/refman/5.7/en/sorting-rows.html

我在 MySQL 5.7+ 上启用了所有默认 sql_modes

【问题讨论】:

【参考方案1】:

我认为错误信息很清楚。出现错误是因为title 可以引用表中的列或列别名。搜索首先查找该列,因此查询被解释为:

SELECT DISTINCT UPPER(LEFT(t.title, 1)) as title
FROM <table_name> t
ORDER BY LEFT(t.title, 1);

我认为您可以通过使用不同的别名来解决此问题:

SELECT DISTINCT UPPER(LEFT(t.title, 1)) as new_title
FROM <table_name> t
ORDER BY LEFT(new_title, 1);

【讨论】:

是的,这行得通,但是如果我在上面的查询中有不同的别名(比如说title_alias) - 它会失败:(。我仍然必须在我的订单子句中提到UPPER(LEFT(title, 1)) . 我能知道为什么这不适用于LEFT(title, 1) 别名不同的原因吗? is order by 与 select 语句中选择的案例有关? @jitendrapurohit 。 . .我想我用别名解释了这个问题——它与列名混淆了,列名优先。

以上是关于若SQL语句中的ORDER BY短语中指定了多个字段,则( )。的主要内容,如果未能解决你的问题,请参考以下文章

若sql语句中order by指定了多个字段,则怎么排序?

若sql语句中order by指定了多个字段,则怎么排序?

如果在 select 中指定了大写,则 Order by 子句失败

SQL基础-order by

sql语句中order by 多个字段同时排序的应用

ORDER BY 子句“IN()”中指定的值,但在泛型 SQL 和 Informix 中