【发布时间】:2017-02-08 14:58:50
【问题描述】:
我正在努力解决这个挑战(不要求最终解决方案)! Problem Link
第一步:我想返回城市列表,length(city) 按长度排序,使用比ROWNUMBER = 1。
选择名称最短的城市:
我的代码是:
SELECT DISTINCT city, LENGTH(city) FROM station ORDER BY LENGTH(city) ASC;
我希望结果按 LENGTH 排序,但它是按城市排序的。如果我改为:
SELECT DISTINCT city, LENGTH(city) FROM station ORDER BY city DESC;
仍然是按城市按 ASC 顺序排序。
我做错了什么?或者是页面有问题,因为即使SELECT city FROM station ORDER by city DESC; 也不起作用。
谢谢。
【问题讨论】:
-
您的第一个查询应该没问题。 (但是,我会做
SELECT DISTINCT city, LENGTH(city) as len FROM station ORDER BY len ASC;) -
在我看来页面有问题。第一个查询没有问题。
-
我仍然倾向于使用 Gordon 的版本,当使用
DISTINCT时,每行都会调用LEN函数,然后删除重复项,而使用GROUP BY时删除重复项首先,然后在其余记录上调用LEN函数。对于像LEN这样开销非常低的东西,并且取决于重复的数量,这是一个相当微不足道的优化,但对于其他功能(特别是用户定义的)或存在大量重复的数据,这可能更重要。
标签: sql sql-order-by