2017-02-08 6 views
0

私はこの課題を解決しようとしています(最終的な解決策を求めていません)! https://www.hackerrank.com/challenges/weather-observation-station-5?h_r=next-challenge&h_v=zenSQL - ORDER BY結果が返されない

最初のステップ - ROWNUMBER = 1よりも使用する長さでソートされた都市、長さ(都市)のリストを返したいとします。

最短名前の都市を選択するには:

私のコードは次のとおりです。

SELECT DISTINCT city, LENGTH(city) FROM station ORDER BY LENGTH(city) ASC; 

私はな長さでソートするが、それは都市によってソートされた結果を期待していました。私が

に変更した場合
SELECT DISTINCT city, LENGTH(city) FROM station ORDER BY city DESC; 

まだASC順にソートされています。

私は間違っていますか? EDIT:またはそれはページの問題です。動作しません。 ありがとう

+2

あなたの最初のクエリはうまくいくはずです。 (しかし、私は 'SELECT DISTINCT city、LENGTH(city)len ASCOM station ORDER BY len ASC; ')を実行します。 – jarlh

+0

私のページに問題があるように見えます。最初のクエリには何も問題はありません。 – GarethD

+0

私はGordonのバージョンを使用する傾向がありますが、 'DISTINCT'を使うときには' LEN'関数がすべての行で呼び出され、重複が削除されますが、 'GROUP BY'を使用するときは重複が最初に除去され、 '関数が残りのレコードに対して呼び出されます。 'LEN'のようなオーバヘッドが非常に小さいものや、括弧の数によっては、これはかなり簡単な最適化ですが、他の機能(特にユーザ定義)や重複が多いデータの場合、これはもっと重要です。 – GarethD

答えて

0

これはデータベースによって異なる場合がありますが、の後にdistinctが処理される可能性があります。ちょうどGROUP BYを使用してください:

SELECT city, LENGTH(city) 
FROM station 
GROUP BY city 
ORDER BY LENGTH(city) ASC; 
+0

私はdownvoteではないと誓っていますが、これはほとんどのRDBMSでは実行されません。なぜなら、ある列でグループ化していて、他の列で集約関数を使用していないからです。 – Lamak

+1

GROUP BYの場合、集計関数は必要ありません。しかし、DISTINCTはORDER BYの前に(論理的に)処理されているはずです。そうでない場合でも、DISTINCTは問題ではありません。元のクエリは、期待どおりの結果を返す必要があります。 – jarlh

+1

@Lamak私が知っているほとんどのDBMSは、 'LEN(City)'が機能的に 'City'に依存していることを認識するのに十分な意味があり、それでそれは – GarethD

関連する問題