私はSQLの練習問題をいくつか経験しています。私が現在困惑しているのは、最もロック・アルバムを数多く記録しているアーティストとアルバム数を選択するように求めています。一緒に質問をまとめる間に、私はロックアルバムの数で注文した問題に遭遇しました。結果はまだアーティストが注文したのではなくカウントされLIMITでORDER BYを使用すると、ORDER BYがクエリで正しく機能するのはなぜですか?
[["Alanis Morissette", "1"], ["Anne Murray", "1"], ["Billy Joel", "2"] ...
["The Beach Boys", "1"], ["The Beatles", "7"], ["The Clash", "1"] ...
["Trash Can Sinatras", "1"], ["Travis", "1"], ["U2", "2"], ["Van Morrison", "1"]]
:
SELECT
a.artist, COUNT(DISTINCT a.asin)
FROM
albums a
JOIN
styles s ON a.asin = s.album
WHERE
s.style LIKE '%Rock%'
GROUP BY
a.artist
ORDER BY
COUNT(DISTINCT a.asin) DESC
のようなものが得られます。しかし、私は、クエリに
LIMIT 1
を追加する場合、ORDER BYは正解([「ビートルズ」、「7」])として適切に動作しているようだ唯一の答えとしてトップに途中から移動します産出した。
ここで何が起こっているのか説明してもらえますか?
注:私はコードはRubyで書かれていることを含め、以下の機能を介して実行すると便利かもしれないと考えている:
require 'pg'
def execute(sql)
conn = PG::Connection.open(:dbname => 'sqlzoo')
query_result = conn.exec(sql).values
conn.close
query_result
end
はまた、これは、クエリのために使用されているテスト(RSpecの)です。
上記の結果は、このテストの結果であり、したがって配列の形式です。
すべてがあなたの言ったとおりであれば、期待した結果が得られるはずです。ちょうど楽しみのために、カウントにエイリアスを付けて、そのエイリアスによって注文するとどうなりますか?: 'a.artist、COUNT(DISTINCT a.asin)をN FROM ........... ORDER BY N DESC'? – Lamak
互換性のないデータベースタグを削除しました。実際に使用しているデータベースのタグを自由に追加してください。 –
@Lamakエイリアスであっても、結果は依然としてアーティストによって注文されます。私には全く奇妙なようだ。 – charleszardo