通过ASC和DESC进行SQL排序

时间:2018-12-17 21:41:13

标签: mysql sql database oracle rdbms

以下SQL语句从Customers表中选择所有客户,并按列CountryCustomerName进行排序,但令我感到困惑的是,因为国家/地区的结果还不错,因为ASC-默认情况下,它从AZ开始,而CustomerName应该是ASC,但结果不是!所以不是ASC,为什么?

enter image description here

4 个答案:

答案 0 :(得分:1)

您的结果确实已正确排序。首先按国家/地区订购,然后按CustomerName进行订购。在阿根廷,您的客户已正确排序。在巴西,它们的分类正确。

如果您希望Comercio Miniero在列表中排第二,请问问自己这将如何影响您的国家/地区排序顺序。排序顺序将处理所有第一列,然后在现有顺序内处理您列出的第二列。

答案 1 :(得分:0)

排序很好,并且可以完成预期的工作。

它按国家然后按客户排序。客户 在每个国家/地区排名...

更仔细地查看结果。在阿根廷,客户是有秩序的,在巴西等地也是。

您希望它如何精确地同时按两列排序?排序列中的数据将不再与同一行中的数据匹配。例如“ Rancho grande”必须位于底部附近,而不是其所属的“ Argentina”旁边。

从逻辑上讲,您似乎期望发生的事情没有任何意义。

答案 2 :(得分:0)

显示的结果似乎按照指定的顺序。

  ORDER BY Country, CustomerName 

指定将首先按Country的值对行进行排序。结果似乎正确排序:阿根廷,奥地利,比利时,巴西。

对于具有相同值Country的行,这些行也将按值CustomerName进行排序。

同样,每组具有相同国家(地区)值的行似乎都正确排序,例如,对于巴西,C...F...G...


如果我们指定ORDER BY CustomerName,则将以不同的顺序获得行。对于样本数据,没有重复的CustomerName值,那么我们可以向ORDER BY添加其他表达式,而这些表达式对行的顺序没有影响。

答案 3 :(得分:0)

图像中显示的结果正确。当查询指定ORDER BY Country, CustomerName时,首先要按照国家(地区)名称进行排序,并且对于每个国家(地区),客户都按升序排序。