phpbar.de logo

Mailinglisten-Archive

AW: HAVING (a) Problem :-)

AW: HAVING (a) Problem :-)

Hans-Jürgen Schwarzer hjs at schwarzer.de
Don Mar 13 07:13:18 CET 2003


Hallo Thilo,

davon ausgehend, daß mysql diesen Konstrukt unterstützt
müßte die Lösung lauten:


SELECT
	min(id),
	grp,
	d
FROM
	(
		SELECT
			grp,
			d
		FROM
			t
		GROUP BY
			grp
	) maxtab,
	t
WHERE
	maxtab.grp = t.grp
AND
	maxtab.d = t.d
GROUP BY
	grp,
	d


Innerhalb einer Satzgruppe für gleiche Werte von GRP wird der größte Wert
von D
ermittelt. Anschließend wird für den ermittelten Wert von D und dem
zugehörigen Wert von GRP
die passende ID ermittelt. Wenn innerhalb der Wertegruppe ( GRP, D ) mehrere
Werte für ID
vorkommen wird der kleinste Wert von ID genommen.

Isses das, was Du wolltest ?

Beste grüße aus Mainz,

Hans-Jürgen Schwarzer









> -----Ursprüngliche Nachricht-----
> Von: Thilo Haas [mailto:haas at haas-media.de]
> Gesendet: Montag, 10. März 2003 14:17
> An: mysql-de at lists.4t2.com
> Betreff: HAVING (a) Problem :-)
>
>
> Hallo Liste,
> ich möchte aus einer recht umfangreichen Tabelle jeweils den
> Datensatz bekommen, der in einem Feld den höchsten Wert hat. Dabei
> bin ich auf ein Problem gestossen:
>
> Die in meinem gesunden SQL Halbwissen zusammengestellte Abfrage
>
> SELECT id,grp,d FROM t GROUP BY grp HAVING d=max(d) ORDER BY id
>
> scheint nicht das gewünschte Ergebnis zu liefern.
>
> Hier mal meine Testdaten:
>
>
> CREATE TABLE t (
>   id varchar(32) NOT NULL default '',
>   grp varchar(255) NOT NULL default '',
>   d double NOT NULL default '0',
>   PRIMARY KEY  (id)
> ) TYPE=MyISAM;
>
> #
> # Daten für Tabelle `t`
> #
>
> INSERT INTO t VALUES ('1', '1', '55');
> INSERT INTO t VALUES ('2', '2', '35.2');
> INSERT INTO t VALUES ('3', '1', '77');
> INSERT INTO t VALUES ('4', '2', '23.1');
> INSERT INTO t VALUES ('5', '3', '60.2');
>
> Ich habe nun folgende Abfrage:
> SELECT id,grp,d FROM t GROUP BY grp HAVING d=max(d) ORDER BY id
>
> Als Ergebnis habe ich folgendes erwartet:
>
> id grp d
> -----------
> 3  1   77
> 2  2   35.2
> 5  3   60.2
>
> Herausgekommen ist aber:
> id grp d
> -----------
> 2  2   35.2
> 5  3   60.2
>
> Es funktioniert immer solange der höchste Wert der erste in der
> Tabelle ist
> ...
>
> Mache ich da einen grundsätzlichen Denkfehler, oder kann man das Problem
> auch anders lösen?
>
> Mit freundlichen Grüssen
>
> Thilo Haas
>
> --
> Haas Media GmbH            | Phone +49(0)511 27038-70
> Agentur für moderne Medien | Fax   +49(0)511 27038-69
> Hindenburgstrasse 38       | Web   http://www.haas-media.de/
> D-30175 Hannover           | Mail  haas at haas-media.de
>
> PGP-FP: 8C7C FD86 3A0B D4D9 3A73 1C8F 629D 60ED BDE9 2B48
>
> --
> Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
> -->>  http://www.4t2.com/mysql
>


-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive