SQL Abfrage Hilfe.

Rita00

Benutzer
Beiträge
7
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?
 
Werbung:
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.
 
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);
 
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 ...
 
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;
 
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 ...


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;
 
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?
 
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?



danke es hat funktioniert!
 
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?


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
 
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.
 
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)


.

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...
 
Werbung:
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.
 
Zurück
Oben