2016-04-29 1 views
-2

Je possède ce tableau:Comment y parvenir dans SQL

enter image description here

Je veux GROUP BY catégorie, puis sélectionnez uniquement top Name de 2 produits, Category et Rating.

sortie finale devrait donc ressembler à ceci:

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 

J'ai essayé de résoudre par mon chemin, mais toujours pas de chance. Je veux les 2 meilleurs résultats de chaque catégorie en fonction de la note si une catégorie a deux produits de la même note comme 5 alors le résultat devrait montrer les deux.

Je suis nouveau sur stackOverFlow c'est ma première question je ne sais pas beaucoup sur les manières et les règles mais je vais apprendre. Désolé, si je ne respecte aucune règle.

+3

Comment définissez-vous les deux premiers produits? Commandez-vous par nom? – Mureinik

+3

Que se passe-t-il lorsque vous avez plus de deux produits dans une catégorie ayant une note de 5? Comment déterminez-vous quels sont ceux que vous devriez retourner? – Siyual

+0

globalement top 2 produits nom ou top 2 produit d'une catégorie particulière. –

Répondre

3

Vous pouvez faire quelque chose comme ceci:

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

Vous pourriez vouloir regarder les différences de rang vs DENSE_RANK dans le cas où vous avez la même note.

+0

Merci pour votre réponse, mais il ne résout pas ce que je cherche par exemple, je veux le top 2 des résultats de chaque catégorie basée sur la notation si une catégorie a deux produits de la même note comme 5 alors le résultat devrait montrer les deux. Mais j'ai appris de ta réponse. – user3882060

+0

Cela dépend de ce que vous voulez faire avec des cravates. Vous pouvez également utiliser row_number() pour obtenir exactement 2 résultats. –