2017-02-27 2 views
0

Ich habe die Tabelle folgende ratings, mit Säulen wie:SQL-Abfrage zu den Ergebnissen herauszufiltern basierend auf Zählung

rating_id, prod_id, rating, buyer, status, prod_type [rating_id einzigartig]

Die rating Spalte Nimmt Werte von 1 bis 5 und buyer nimmt nur 2 Werte 0 oder 1.

Ich möchte eine SQL-Abfrage schreiben, die alle diese Produkte mit ihrer durchschnittlichen Bewertung von Käufern abruft, die 1 sind, so dass die Anzahl der Käufer, die 1 sind, größer als 5 für ein bestimmtes Produkt sind.

Zum Beispiel möchte ich das Ergebnis sein wie:

`prod_id` `avg(rating)` `count(*)` 
ksks  3.2   6 
kglgkj  4.0   8 
jfkfj  2.0   13 

ich die folgende Abfrage geschrieben hatte, aber es funktioniert nicht:

SELECT prod_id, avg (Stern), count (*) WHERE Käufer = 1 UND Anzahl (*)>5 GROUP BY prod_id;

Ich bekomme den Fehler ungültige Verwendung der Gruppenfunktion.

Jede Hilfe wäre willkommen. Danke

+0

Sie nicht Agregate Funktionen in where-Klausel verwenden können. Wenn Sie das Ergebnis filtern möchten, verwenden Sie die HAVING-Klausel http://www.mysqltutorial.org/mysql-having.aspx – vitalygolub

Antwort

2

Sie müssen HAVING verwenden, um nach dem COUNT zu überprüfen. Verwenden Sie die folgende Abfrage:

SELECT prod_id, AVG(rating), COUNT(*) 
WHERE buyer = 1 
GROUP BY prod_id 
HAVING COUNT(*) > 5 
1

Sie HAVING hierfür verwenden können:

SELECT prod_id, avg(rating), count(*) 
WHERE buyer = 1 
GROUP BY prod_id 
HAVING count(*) > 5 
Verwandte Themen