Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

MYSQL: Maximum einer spalte ermitteln.

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
np
PostRank 6
PostRank 6
Beiträge: 415
Registriert: 16.08.2006, 15:57

Beitrag von np » 15.02.2007, 11:42

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

Anzeige von ABAKUS

von Anzeige von ABAKUS »

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

Jetzt anfragen: 0511 / 300325-0.


auftragslinker
PostRank 7
PostRank 7
Beiträge: 525
Registriert: 21.04.2005, 14:36

Beitrag von auftragslinker » 15.02.2007, 11:59

SELECT nr FROM top WHERE wert = max(wert)

np
PostRank 6
PostRank 6
Beiträge: 415
Registriert: 16.08.2006, 15:57

Beitrag von np » 15.02.2007, 12:18

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:

_player
PostRank 3
PostRank 3
Beiträge: 65
Registriert: 15.02.2007, 11:57

Beitrag von _player » 15.02.2007, 12:20

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'];

np
PostRank 6
PostRank 6
Beiträge: 415
Registriert: 16.08.2006, 15:57

Beitrag von np » 15.02.2007, 12:29

geht so eine simple abfrage nicht einfacher?

_player
PostRank 3
PostRank 3
Beiträge: 65
Registriert: 15.02.2007, 11:57

Beitrag von _player » 15.02.2007, 12:37

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

np
PostRank 6
PostRank 6
Beiträge: 415
Registriert: 16.08.2006, 15:57

Beitrag von np » 15.02.2007, 13:02

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.

auftragslinker
PostRank 7
PostRank 7
Beiträge: 525
Registriert: 21.04.2005, 14:36

Beitrag von auftragslinker » 16.02.2007, 08:44

habs mir nochmal angeguckt, muss natürlich mit einem subselect laufen:

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

_player
PostRank 3
PostRank 3
Beiträge: 65
Registriert: 15.02.2007, 11:57

Beitrag von _player » 16.02.2007, 09:17

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?

auftragslinker
PostRank 7
PostRank 7
Beiträge: 525
Registriert: 21.04.2005, 14:36

Beitrag von auftragslinker » 16.02.2007, 13:57

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

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag