Seite 1 von 1

MYSQL: Maximum einer spalte ermitteln.

Verfasst: 15.02.2007, 11:42
von np
Ich möchte in einem Table "top" das Maximum eines Feldes "wert" mit folgender Abfrage ermitteln und den dazugehörigen Wert des Feldes "nr" ausgeben.

Code: Alles auswählen

SELECT max(wert), nr FROM top
Nur leider funkiontiert das nicht, weil ein "Group by" verlangt wird. Ich will es aber nicht gruppieren.

Code: Alles auswählen

SELECT max(wert) FROM top
Funkt einwandfei. Aber ich brauch unbedingt auch die "nr"!

Was mach ich da falsch????

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Verfasst: 15.02.2007, 11:59
von auftragslinker
SELECT nr FROM top WHERE wert = max(wert)

Verfasst: 15.02.2007, 12:18
von np
danke erstmal.
aber so wirds nicht gehen, denn es kann einträge geben, die den selben wert haben!

Warum muss da zwingend die Group by Klausel sein? :evil:

Verfasst: 15.02.2007, 12:20
von _player
auftragslinker hat geschrieben:SELECT nr FROM top WHERE wert = max(wert)
Das geht bei mir nicht.

Habe es aber mal mit zwei Abfragen gemacht. Aber müsste doch auch in einer gehen, oder?

Beispiel für die zwei Abfragen:

Code: Alles auswählen

$query = @mysql_query("SELECT max(wert) AS max FROM top");
$result = mysql_fetch_array($query);

$max = $result['max'];

$query = @mysql_query("SELECT nr FROM top WHERE wert = '$max'");
$result = mysql_fetch_array($query);

$nr = $result['nr'];

Verfasst: 15.02.2007, 12:29
von np
geht so eine simple abfrage nicht einfacher?

Verfasst: 15.02.2007, 12:37
von _player
np hat geschrieben:danke erstmal.
es kann einträge geben, die den selben wert haben!

Warum muss da zwingend die Group by Klausel sein? :evil:
Was willst du denn nun genau? Eine Spalte ermitteln die den größten Wert hat oder alle Spalten die den größten Wert haben?

Wofür soll es denn genau sein?

Group by wird er wollen damit die "mehreren" ermittelten Spalte geordnet ausgeben werden. Denke ich
:D

Verfasst: 15.02.2007, 13:02
von np
mit dem code von _player funktioniert es doch, weil ich draufgekommen bin, dass ich das doppelte Vorkommen vernachlässigen kann.

Ich wollte halt nur diese Abfragen in einer zusammenfassen.

Verfasst: 16.02.2007, 08:44
von auftragslinker
habs mir nochmal angeguckt, muss natürlich mit einem subselect laufen:

SELECT nr FROM top WHERE wert = ( SELECT max(wert) FROM top )

Verfasst: 16.02.2007, 09:17
von _player
auftragslinker hat geschrieben:habs mir nochmal angeguckt, muss natürlich mit einem subselect laufen:

SELECT nr FROM top WHERE wert = ( SELECT max(wert) FROM top )
Richtig! Genau so geht es! Wieder was dazu gelernt.

Gilt das denn dann als eine Abfrage oder sind es trotzdem zwei Abfragen die eben nur kürzer ist?

Verfasst: 16.02.2007, 13:57
von auftragslinker
es gilt als zwei abfragen, wobei je nach system und version (vermute du hast mysql 4.x) das dbms durchaus mit diesem subselect besser optimieren kann. abgesehen davon, wenn deine datenbank caching unterstützt, muss so nur ein select gecached werden und somit auch nur eine anfrage an den cache gesendet werden. je nach häufigkeit also durchaus ein vorteil, stimmts airport? ;)