Willkommen bei Entwickler-Forum.
Ergebnis 1 bis 3 von 3
  1. #1
    Gesperrt
    Registriert seit
    13.07.2016
    Beiträge
    1

    Standard Hile bei einer SQL Anfrage

    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
    Code SQL:
    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.
    Geändert von fanderlf (15.07.2016 um 00:38 Uhr) Grund: Code formatiert

  2. #2
    Stammgast
    Registriert seit
    18.07.2008
    Beiträge
    3.043

    Standard

    Code SQL:
    SELECT DISTINCT(customer_id) FROM cr_ratings WHERE ratings > 1;

    So in etwa?

    Ach ich habe nicht gesehen, dass sie NUR 5 Sterne Ratings haben dürfen.

    Code SQL:
    SELECT DISTINCT(customer_id)
    FROM cr_ratings
    WHERE customer_id IN
    (SELECT customer_id FROM cr_ratings WHERE ratings = 5)
    AND customer_id NOT IN
    (SELECT customer_id FROM cr_ratings WHERE ratings = 1)

    Das Problem an deiner Query ist dass vermutlich gar nichts angezeigt wird, weil Du im NOT EXISTS nicht verlinkst. Ich vermute richtig müsste es mit EXISTS in etwa so aussehen:

    Code SQL:
    SELECT customer_Id 
    FROM CR_RATINGS r1
    WHERE EXISTS ( SELECT * FROM cr_Ratings r2 WHERE rating=5 AND r1.customer_id = r2.customer_id) 
    AND NOT EXISTS (SELECT * FROM cr_ratings r3 WHERE rating=1 AND r1.customer_id = r3.customer_id);

    Das ist jetzt aber auch nur eben mal so hingetippt. Der ersteren Lösung würde ich mehr vertrauen, weil ich die IN Syntax öfters verwende. Ausserdem finde ich die IN Lösung schöner zu lesen, das ist aber geschmackssache. Im Fall der Fälle wäre natürlich auch noch der Ausführungsplan der Statements zu prüfen, falls man die Performance dringend braucht.
    Geändert von fanderlf (15.07.2016 um 00:45 Uhr)

  3. #3
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.283

    Standard

    Es sollte doch mindestens 5 sein oder?
    Ansonsten würde ich noch versuchen, die "where ..in" Konstrukte in Outer Join umzubauen.
    Gruß, defo

 

 

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •