Frage von Aziztokhi, 12

SQL Abfrage HIlfe?

Hallo Leute, habe eine Frage zu einer SQL Abfrage.

Meine Tabelle: CR_Ratings hat folgende Attribute: Customer_ID, Product_ID und Ratings.

Ich soll alle Customer Ids anzeigen die mindestens ein 5 sterne rating haben und kein 1 Stern rating haben.

Customer können mehrere bewertungen abgeben.

HInweis: Ratings werden nur mit einer Zahl angegeben (1-5)

Mein Lösungsweg SELECT customer_Id FROM CR_RATINGS WHERE exists ( SELECT * FROM cr_Ratings WHERE rating=5) AND NOT EXISTS (SELECT * FROM cr_ratings where rating=1);

ich weiß aber nicht ob das richtig so wäre, hat jemand andere oder bessere lösungsvorschläge? Ich bedanke mich im voraus.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von wotan38, 9

Ich würde diese Aufgabe so formulieren, glaube aber, dass Deine Formulierung trotzdem richtig ist:

SELECT customer_Id FROM cr_ratings

WHERE customer_Id IN

( SELECT customer_Id FROM cr_ratings

WHERE rating=5)

AND customer_Id NOT IN

(SELECT customer_Id FROM cr_ratings

where rating=1);

Du kannst die Ergebnisse ja mal vergleichen.

Kommentar von Aziztokhi ,

Juhuuu du bist ein genie, das ist genau was ich brauche!!!! danke vielmals!!! ich bin nocht so vertraut mit  not in und exists ... muss das aber unbedingt lernen.

Antwort
von Orsovai, 6

Das mindestens 5 Sterne macht ja keinen Sinn: 5 ist das Maximum, also ist das identisch mit genau 5 Sterne haben.

Und ein Eintrag mit mindestens 5 Sternen kann ja niemals 1 Stern haben, also kannst Du Dir das auch sparen.

Oder willst Du alle mit 5 Sternen + alle mit nicht 1 Stern? Dann kannst Du aber gleich nach nicht 1 Stern fragen.

Oder willst Du alle zwischen 1 und 5 Sterne?

Kommentar von Orsovai ,

Ah ich glaub ich verstehe, das Rating bezieht sich auf das Produkt und Du willst alles customers, die mindestens einem Produkt 5 Sterne gegeben haben, oder?

Kommentar von Aziztokhi ,

genau richtig verstanden. ich möchte jeden customer der ein rating auf ein produkt mit 5 sterne abgegeben hat, aber kein customer mit einem rating von 1

Antwort
von adulescentulus, 5

Ich denke du Suchst sowas : 

SELECT Customer_id FROM CR_RATINGS  GROUP BY Customer_id HAVING Rating > 1 AND MAX(Rating) = 5

Es Gruppiert nach Customer_Id und prüft innerhalb der Gruppe ob Rating > 1 ist (Also kein 1) und das Maximum = 5 ist

Keine passende Antwort gefunden?

Fragen Sie die Community