Ich übe meine Fähigkeiten in MySQL mit der Sakila DB.Holen Sie sich die ersten n Zeilen für die Gruppe nach der Zusammenfassung
Ich hätte ich eine Ansicht namens Rentals_customer_store_film_category mit der Union von Kunden, Zahlungen, Mieten, Film und Kategorie Tabellen erstellt. Ich möchte jetzt die Top 5 Filme nach Einkommen holen. Das heißt, ich würde lügen, um alle Einnahmen jedes Films nach Laden zusammenzufassen und dann die ersten 5 zurückgeben. Ich habe den folgenden Code ausprobiert, aber es funktioniert nicht. Ich kann nicht herausfinden, was daran falsch ist Irgendwelche Hilfe?
SELECT store_id, film_id, income
FROM
(SELECT film_id, store_id, sum(amount) as income,
@store_rank := IF(@current_store = store_id, @store_rank + 1, 1) AS store_rank,
@current_store := store_id
FROM rentals_customer_store_film_category
group by store_id, film_id
ORDER BY store_id, income DESC, film_id
) ranked
WHERE store_rank <= 5
ERGEBNISSE UNTEN. Wie Sie sehen können, hört es nicht bei der fünften Zeile pro Geschäft auf. Es zeigt alle Filme von Speicher, während ich nur die Top-5 für Speicher mögen würde: id 1 und Top-5 für den Shop-ID 2.
store_id film_id income
1 971 134.82
1 879 132.85
1 938 127.82
1 973 123.83
1 865 119.84
1 941 117.82
1 267 116.83
1 327 110.85
1 580 106.86
1 715 105.85
1 897 104.85
...
...
...
...
2 878 127.83
2 791 127.82
2 854 123.83
2 946 117.86
2 396 113.81
2 369 111.84
2 764 110.85
2 260 110.84
2 838 110.82
2 527 109.83
2 893 106.84
2 71 102.87
2 8 102.82
...
...
...
...
Helfen Sie uns, Ihnen zu helfen - bitte teilen Sie einige Beispieldaten und das Ergebnis, das Sie versuchen zu bekommen. – Mureinik
erledigt. Tut mir leid, dass ich es vorher nicht getan habe. – user3623123