Ich gehe durch einige SQL-Übungsprobleme. Der eine, den ich derzeit verblüffe, fragt nach dem Künstler, der die meisten Rockalben aufgenommen hat, sowie nach der Anzahl der Alben. Während ich Stück für Stück die Frage zusammenstellte, stieß ich auf ein Problem, das nach der Anzahl der Rockalben geordnet war.Warum funktioniert ORDER BY nur ordnungsgemäß in meiner Abfrage bei Verwendung mit LIMIT?
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
Renditen etwas wie:
[["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"]]
Die Ergebnisse von Künstler noch bestellt werden, statt zu zählen. Allerdings, wenn ich
LIMIT 1
auf die Abfrage hinzuzufügen, scheint ORDER BY richtig als die richtige Antwort zu arbeiten ([ "The Beatles", "7"]) bewegt sich von der Mitte nach oben als die einzige Antwort, die ist ergeben.
Könnte jemand bitte erklären, was hier vor sich geht?
HINWEIS: Ich glaube, es könnte hilfreich sein, zu schließen, dass der Code in Ruby geschrieben und durch die folgende Funktion ausführen:
require 'pg'
def execute(sql)
conn = PG::Connection.open(:dbname => 'sqlzoo')
query_result = conn.exec(sql).values
conn.close
query_result
end
Dies ist auch der Test (RSpec) für die Abfrage verwendet werden:
describe "rock_superstars" do
it "selects the name of the most prolific rock artist" do
expect(rock_superstars).to contain_exactly(
["The Beatles", "7"]
)
end
end
Die obigen Ergebnisse sind die Ausgabe dieses Tests, daher die Form eines Arrays.
Wenn alles wie gesagt ist, sollten Sie Ihre erwarteten Ergebnisse erhalten. Nur zum Spaß, was passiert, wenn Sie der Zählung einen Alias geben und nach diesem Alias sortieren ?: SELECT a.artist, COUNT (DISTINCT a.asin) als N FROM ........... ORDER BY N DESC? – Lamak
Ich entfernte die inkompatiblen Datenbank-Tags. Fühlen Sie sich frei, das Tag für die Datenbank hinzuzufügen, die Sie wirklich verwenden. –
@Lamak sogar mit dem Alias, die Ergebnisse werden immer noch von Künstler bestellt. Es scheint mir völlig bizarr. – charleszardo