MySQL min Funktion für ganze Zeile?

2 Antworten

Irgendwie passt deine Abfrage nicht mit dem Text darüber zusammen.

Aus der Abfrage schließe ich, dass du alle Kinderräder herausbekommen möchtest, die den niedrigsten Preis haben, wobei das auch mehrere sein können (wenn alle dasselbe kosten).

An sich müsste das schon ungefähr so klappen wie in deinem Code.

Vielleicht hast du ja das Problem, dass du in der Unterabfrage den niedrigsten Mietpreis sämtlicher Artikel holst und dann alle Kinderfahrräder suchst, die genau diesen Preis haben. Das sind eventuell auch 0 Stück, da es in der Datenbank andere Artikel geben könnte, die weniger kosten als ein Kinderrad.

Es geht aber auch ganz ohne MIN()-Funktion und Unterabfrage: Du machst einfach eine Abfrage für alle Kinderräder und schreibst am Ende dazu:

ORDER BY tagesmietpreis

Und dann liest du so lange Datensätze aus, wie sich der Preis nicht ändert.

Das klingt ineffizient, ist es aber (zumindest bei MySQL/MariaDB) nicht, da auf die eigentlichen Daten erst zugegriffen wird, wenn diese tatsächlich abgerufen werden.

Insbesondere gilt das dann, wenn du auf das Mietpreis-Feld einen Index gesetzt hast, was du aber ohnehin auf jeden Fall tun solltest, wenn du Abfragen nach dem Preis machst.

Die sogenannten Aggregatfuntionen COUNT, MIN, MAX, SUM, AVG können grundsätzlich nur auf eine Spalte einer Tabelle angewendet werden.

Ich vermute, dass die Aufgabe verlangt, die billigsten Fahrräder und ihren Preis zu ermitteln. Die Idee, den niedrigsten Preis mit einer Subquery zu ermitteln, ist da gar nicht schlecht.

Die Subquery ermittelt allerdings den absolut niedrigsten Mietpreis und in der übergeordneten Query steht die zusätzliche Einschränkung auf Fahrräder der Art "Kinderrad". Wenn ich es recht verstehe, beantwortet die gezeigte SELECT-Anweisung daher die Frage, ob es zum niedrigsten Mietpreis überhaupt irgendwelche Kinderräder gibt und nicht die Frage, welches die biligsten Kinderräder sind.

Wenn du in die Subquery ebenfalls noch die Einschränkung auf Kinderräder hineinnimmst, wirst du im allgemeinen Fall ein anderes Ergebnis erhalten.

Ohne das Datenbankschema (also die Tabellen und bie Beziehungen ziwschen den Tabellen) zu kennen und ohne zu wissen, welche Frage die SELECT-Anweisung eigentlich beantworten soll, kann ich leider nicht beurteilen, ob dir mein Hinweis wirklich hilft. Falls dies nicht der Fall ist, sollest du die zu lösende Aufgabe bitte genauer beschreiben und auch das Datenbankschema mitteilen.

Woher ich das weiß:Berufserfahrung – Berufstätigkeit als Software-Entwickler