2016-04-29 5 views
-2

Ich habe diese Tabelle:Wie dies in SQL erreichen

enter image description here

ich GROUP BY Kategorie will und dann die Auswahl nur Top-2-Produkt Name, Category und Rating.

So endgültige Ausgabe sollte wie folgt sein:

Id  Name  Category  Rating 
1  Iphone Electronics 5 
7  MI  Electronics 5 
4  Top  Fashion  5 
9  Shoes  Fashion  5 
10  Coffe  Food   5 
11  jAM  Food   4 

Ich habe versucht, über meine Art und Weise zu lösen, aber noch kein Glück. Ich möchte die Top 2 Ergebnis aus jeder Kategorie basierend auf der Bewertung, wenn eine Kategorie zwei Produkte der gleichen Bewertung wie 5 dann Ergebnis beide zeigen.

Ich bin neu auf StackOverFlow das ist meine erste Frage Ich weiß nicht viel über die Manieren und Regeln, aber ich werde lernen.

Sorry, wenn ich eine Regel bricht.

+3

Wie definieren Sie die beiden oberen Produkte? Bestellst du mit dem Namen? – Mureinik

+3

Was passiert, wenn Sie mehr als zwei Produkte in einer Kategorie mit der Bewertung "5" haben? Wie bestimmen Sie, welche zwei von denen Sie zurückgeben sollten? – Siyual

+0

insgesamt top 2 Produkte Name oder Top 2 Produkt einer bestimmten Kategorie. –

Antwort

3

Sie können etwas tun:

select * 
from (
    select *, 
    rank() over (partition by Category order by Rating desc) as Rank 
    from yourtable 
) X 
where Rank <= 2 

Vielleicht möchten Sie die Unterschiede von Rang vs DENSE_RANK falls Sie die gleiche Bewertung haben suchen.

+0

Vielen Dank für Ihre Antwort, aber es löst nicht, was ich suche für zB Ich möchte die Top 2 Ergebnis aus jeder Kategorie basierend auf Bewertung, wenn eine Kategorie zwei Produkte haben die gleiche Bewertung wie 5 dann Ergebnis sollte beides zeigen. Aber ich habe noch von deiner Antwort gelernt. – user3882060

+0

Es hängt davon ab, was du mit Krawatten machen willst. Sie können row_number() auch verwenden, um genau 2 Ergebnisse zu erhalten. –