0%

Präzise Fragen stellen · Übung

Passende Gegenstände absteigend sortieren

Die Suche findet jetzt drei geeignete Gegenstände, aber die längste erlaubte Leihdauer steht nicht garantiert an erster Stelle. Wenn Riley die flexibelste Option oben sehen möchte, wird die Zeilenfolge zu einem Teil der Frage statt zu einem Detail, das dem Zufall überlassen bleibt.

Entferne das Semikolon hinter der WHERE-Bedingung in search.sql und füge diese Zeile hinzu:

ORDER BY loan_days DESC;

Das vollständige Ende sollte so lauten:

WHERE (category = 'tools' OR category = 'events')
  AND loan_days <= 7
ORDER BY loan_days DESC;

Klicke auf Run. Die Zeilen mit sieben Tagen sollten vor der Stehleiter mit drei Tagen erscheinen:

TL-100 | Cordless drill | tools | 7
EV-101 | Folding table | events | 7
TL-220 | Step ladder | tools | 3

ORDER BY fordert SQLite auf, das fertige Ergebnis nach einem Wert anzuordnen. DESC bedeutet absteigend, also kommen größere Werte von loan_days vor kleineren. ASC oder das Weglassen der Richtung würde die kürzeste Leihdauer zuerst zeigen, weil aufsteigend die Standardrichtung ist.

Du kannst die sichtbaren Leihdauern von oben nach unten lesen, um die Richtung zu prüfen: 7, 7, 3. Jeder nächste Wert ist gleich groß oder kleiner als der darüber. Darauf solltest du nach Run achten.

Der Akkubohrer und der Klapptisch haben beide sieben Tage Leihdauer. Jeder von ihnen kann hier zuerst erscheinen. Das Sortieren nach einem einzigen Wert kann Zeilen mit gleichem Wert nicht unterscheiden, und SQLite hat nicht zugesagt, die zufällig zuvor sichtbare Reihenfolge zu erhalten.

Dieser Gleichstand ist aufschlussreich. Deine Abfrage hat genau getan, was du verlangt hast, aber deine Frage ist noch nicht detailliert genug, um für jede Zeile eine einzige Reihenfolge festzulegen. In der nächsten Übung lösen wir Gleichstände auf. Hier sind nur zwei Dinge erforderlich: Die passenden Zeilen bleiben gleich, und ihre Leihdauern werden beim Lesen nach unten niemals größer.

Submit verwendet einen anderen Katalog, dessen Daten in einer anderen Reihenfolge eingefügt wurden. Setze DESC direkt hinter loan_days, damit dein SQL die Richtung angibt, statt sich auf IDs, Einfügereihenfolge oder Rechnungen zu verlassen, die zufällig eine bestimmte Zahlenfolge umkehren.

Du hast die Zeilenfolge zu einem ausdrücklichen Teil der Antwort gemacht. Die längste passende Leihdauer steht jetzt oben, weil die Abfrage es so verlangt.

Aufgabe

Sortiere die passenden Zeilen in search.sql nach loan_days DESC. Behalte die vorhandenen Spalten und den Filter unverändert bei.

Führe die Abfrage aus, prüfe, ob längere Leihdauern zuerst erscheinen, und reiche sie ein.