Announcement

Collapse
No announcement yet.

Hile bei einer SQL Anfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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
    [highlight=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);
    [/highlight]

    ich weiß aber nicht ob das richtig so wäre, hat jemand andere oder bessere lösungsvorschläge? Ich bedanke mich im voraus.
    Zuletzt editiert von fanderlf; 14.07.2016, 23:38. Reason: Code formatiert

  • #2
    [highlight=sql]
    SELECT distinct(customer_id) FROM cr_ratings where ratings > 1;
    [/highlight]

    So in etwa?

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

    [highlight=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)
    [/highlight]

    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:

    [highlight=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);
    [/highlight]

    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.
    Zuletzt editiert von fanderlf; 14.07.2016, 23:45.

    Comment


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

      Comment

      Working...
      X