2017-09-11 3 views
0

Ich habe eine Tabelle mit dem Namen ReviewFact Zählung des Auftretens von bestimmtem Wert zu erhalten, die die folgenden Eigenschaften hat:Wie für jede Zeile SQL

- CategoryID (Primary Key) 
- Star_Rating (Primary Key) 
- No_of_Reviews 

CategoryID bezieht sich auf bestimmte Produkte, bezieht sich STAR_RATING auf eine Stern wird von den Benutzern gegeben No_of_Reviews bezieht sich darauf, wie viele Nutzer diese Bewertung abgegeben haben.

Ich muss eine SQL-Abfrage schreiben, die die Anzahl der 5-Sterne-Bewertungen für jede Kategorie zeigt.

Ich habe mit dem folgenden kommen:

SELECT r.CategoryID, r.NUMBER_OF_REVIEWS 
FROM REVIEWFACT r 
WHERE r.Stars = 5 
ORDER BY r.NUMBER_OF_REVIEWS desc; 

Mit diesem ich die Anzahl der Bewertungen für Reihen erhalten, die 5-Sterne-Bewertungen, aber nicht für diejenigen, die nicht tun. Diejenigen, die das nicht tun, sollten den Zählerstand als 0 haben. Wie gehe ich vor, um das zu lösen?

Wenn es die folgenden Zeilen in der Tabelle ist:

CategoryID  Star_Rating  No_of_Reviews 
1     5     10 
2     5     4 
3     2     9 

Die Abfrage

CategoryID  No_of_Reviews 
1     10 
2     4 
3     0 

Antwort

0

Gruppe nach Kategorie und Summe bedingt:

select 
    categoryid, 
    sum(case when stars = 5 then no_of_reviews else 0 end) as no_of_reviews 
from reviewfact 
group by categoryid 
order by no_of_reviews; 
1

zurückkehren soll ich glaube, Sie wollen einfach nur ein case:

SELECT r.CategoryID, 
     (CASE WHEN r.starts = 5 THEN r.NUMBER_OF_REVIEWS ELSE 0 END) 
FROM REVIEWFACT r 
ORDER BY r.NUMBER_OF_REVIEWS desc; 
+0

Dies funktioniert, aber es mehrere Datensätze enthalten gleiche CategoryID zurückgibt. Wenn CategoryID 6 zwei Sterne Bewertungen, 2 und 5 hat, gibt es eine Zeile für jede Anzahl von 5 Sternen zurück, aber ich möchte nur, dass es die Anzahl für fünf Sterne enthält (wenn es existiert) oder sonst 0 für jede Kategorie ID zurückgeben. – AndyrK

+0

@AndyrK. . . So werden Ihre Beispieldaten aufgebaut. Wenn Sie eine * andere * Frage haben, dann stellen Sie sie als Frage. Wenn Sie diese Frage ändern, werden Sie die Antworten von Personen ungültig machen, die das ursprüngliche beantwortet haben. –

0

Samen, mit IF-Anweisung:

SELECT r.CategoryID, IF(r.Stars = 5, r.NUMBER_OF_REVIEWS, 0) as bestReviews 
FROM REVIEWFACT r 
ORDER BY r.NUMBER_OF_REVIEWS desc;