Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

SQL Abfrage Hilfe.

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Rita00, 1 Mai 2020.

  1. Rita00

    Rita00 Benutzer

    Hallo an Alle! Ich stehe vollkommen am schlauch. Bei der folgenden Aufgabe:

    (es geht hier nur um eine tabelle "krankenhaus.medikament" die die attribute name und preis hat)

    Welches Medikament (name, preis) ist am teuersten (können aber auch mehrere Medikamente sein, wenn diese gleich teuer sind!)? (Bem.: Hier ist eine Unteranfrage innerhalb der WHERE-Bedingung nötig!

    mit der vordefinierten funktion max( ) geht es jedenfalls nicht. Kann mir bitte jemand helfen?
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Ist das eine Hausaufgabe? Habt ihr schon ORDER BY behandelt? Window-Funktionen wie rank() und dense_rank()? Was hast Du bisher versucht und was ist passiert? Und ja: max() ist auch ein erfolgversprechender Ansatz.
     
  3. Rita00

    Rita00 Benutzer

    Hallo. Bisher hatten wir noch nicht sämtliche funktionen behandelt die du oben genannt hast.
    Bisher habe ich nur folgendes versucht, kam aber eine fehlermeldung liefert.

    SELECT name, preis FROM krankenhaus.medikament
    WHERE preis = max(preis);
     
  4. akretschmer

    akretschmer Datenbank-Guru

    WHERE filtert die Datensätze VOR der Berechnung von z.B. max(). Das ist also offensichtlich ein falscher Ansatz. Schon mal drüber nachgedacht, z.B. nach dem Preis absteigend zu sortieren und die Ergebnissmenge auf 1 Datensatz zu beschränken? Mal so als Denkrichtung ...
     
  5. Rita00

    Rita00 Benutzer

    das habe ich jetzt gemacht. Jedoch soll die ausgabe auch medikamente ggf. beinhalten die genauso teuer sind wie das medikament mit dem höchsten preis. Wenn ich das Limit auf 1 setze bekomme ich ja nur genau eines der teuersten medikamente.
    Medikament X = 1000€. Wie schreibe ich denn bitte die abfrage so um das auch mehrere medikamente mit dem selben höchsten preis berücksichtigt werden? Also z.B.

    Medikament X = 1000€
    Medikament Y = 1000€
    Medikament Z = 1000€

    SELECT NAME, preis FROM krankenhaus.medikament
    where ORDER BY Preis DESC LIMIT 1;
     
  6. Rita00

    Rita00 Benutzer


    das habe ich jetzt gemacht. Jedoch soll die ausgabe auch medikamente ggf. beinhalten die genauso teuer sind wie das medikament mit dem höchsten preis. Wenn ich das Limit auf 1 setze bekomme ich ja nur genau eines der teuersten medikamente.
    Medikament X = 1000€. Wie schreibe ich denn bitte die abfrage so um das auch mehrere medikamente mit dem selben höchsten preis berücksichtigt werden? Also z.B.

    Medikament X = 1000€
    Medikament Y = 1000€
    Medikament Z = 1000€

    SELECT NAME, preis FROM krankenhaus.medikament
    where ORDER BY Preis DESC LIMIT 1;
     
  7. akretschmer

    akretschmer Datenbank-Guru

    Code:
    test=*# select * from rita00 ;
     medikament | preis
    ------------+-------
     med1       |  1000
     med2       |  1000
     med3       |  1000
     med4       |   100
     med5       |   600
    (5 rows)
    
    test=*# select medikament, max(preis) from rita00 group by medikament having max(preis) = (select max(preis) from rita00 );
     medikament | max  
    ------------+------
     med1       | 1000
     med2       | 1000
     med3       | 1000
    (3 rows)
    
    test=*#
    
    so besser?
     
  8. Rita00

    Rita00 Benutzer



    danke es hat funktioniert!
     
  9. Rita00

    Rita00 Benutzer


    wärst du so lieb mir bitte auch bei der nächsten aufgabe zu helfen?

    "Welche Produzenten stellen Medikamente her, die mehr als doppelt so teuer sind wie der Durchschnittspreis aller Medikamente. Geben sie den Produzenten und den Namen des Medikamentes an. (Bem.: Auch hier ist eine Unteranfrage innerhalb der WHERE-Bedingung hilfreich!)"

    jetzt habe ich hier ja das problem, das ich nicht weiß wie ich das "doppelt so teuer wie der durchschnittspreis aller Medikamente" angeben soll. Außerdem sollen zum unterschied zu der vorherigen aufgabe nur produzent und medikament ausgegeben werden statt "preis".

    so wie unten erhalte ich eine fehlermeldung...

    SELECT NAME, produzent, avg(preis) from krankenhaus.medikament group by NAME having avg(preis) = (select avg(preis)*2 FROM krankenhaus.medikament)


    (medikament)
    produzent|name| preis
    ------------+-------
    prod1| med1 | 1000
    prod2| med2 | 1000
    prod3|med3 | 1000
    prod4| med4 | 100
    prod5| med5 | 600
     
  10. akretschmer

    akretschmer Datenbank-Guru

    mal so als Orientierung...

    Code:
    test=*# select * from rita00 ;
     prod  | medikament | preis
    -------+------------+-------
     prod1 | med1       |  1000
     prod2 | med2       |  1000
     prod3 | med3       |  1000
     prod4 | med4       |   100
     prod5 | med5       |   600
    (5 rows)
    
    test=*# select prod from rita00 where preis > (select avg(preis) from rita00 );
     prod  
    -------
     prod1
     prod2
     prod3
    (3 rows)
    
    

    Versuche bitte Deine Hausaufgaben selber zu lösen, so schwer ist das nicht.
     
  11. Rita00

    Rita00 Benutzer

    nochmals danke! Bei der abfrage wurde aber hier ja nur angegeben das die produzenten ausgegeben werden die die medikamente stellen die lediglich größer als der durchschnittspreis aller medikamente sind. Wie gebe ich aber bitte das "doppelt" an. Die Nutzung des Operators > klappt zwar, aber wenn ich doppelt wie z.B x*2 angebe meckert der compiler...
     
  12. akretschmer

    akretschmer Datenbank-Guru

    da wir nicht wissen, was Du genau versucht hast und was die genaue Fehlermeldung ist (wo ist da ein Compiler involviert?) können wir nicht helfen.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden