![]() |
AW: HAVING mit MAX (alias)
Zitat:
die Abfrage ist Wirklichkeit deutlich komplexer, deshalb war es mit dem Testen nicht so einfach. Ich habe es aber nochmal ausprobiert und behaupte, dass es nicht funktioniert! Es wird mir kein Datensatz ausgegeben. Ich vermute, dass die Gleichung in der Having Clause nicht funktioniert. Zitat:
SQL-Code:
in einer Abfrage kann eine temporary table offensichtlich nicht zweimal benutzt werden. Deshalb musste ich noch eine zweite temp table benutzen :-(
select * from #temp where Anz = (select max(Anz) from #temp)
|
AW: HAVING mit MAX (alias)
Hi Spock
Ich habe 0 Ahnung von mysql und deshalb sind meine Vorschläge nur Theorie. Wenn mySQL mit Variablen umgehen kann, könntest Du dir die höchste Anzahl in einer Variablen merken und dann auf die 2.Tabelle verzichten. So z.B.
SQL-Code:
Wäre denkbar, das das nur in einer Prozedur oder einem BEGIN-END Block geht.
DECLARE maxAnzahl INT
create Temporary table Anzahl (id int, Anz int) insert into Anzahl select id, count(*) from myTable select max(Anz) from Anzahl into maxAnzahl select * from Anzahl where Anz = @maxAnzahl DROP TABLE Anzahl |
AW: HAVING mit MAX (alias)
Die Lösung von Bummi und mir macht letztlich ja auch nichts anderes, nur dass die temporäre Tabelle nicht explizit angelegt wird.
SQL-Code:
select max(anz) from (
select count(*) as anz from Tabelle group by id /* ← temporäre Tabelle */ ) |
AW: HAVING mit MAX (alias)
Na doch. Mr.Spock möchte alle Einträge, deren Spalte 'ID' am häufigsten vorkommt.
Deine Query liefert nur die maximale Anzahl. Der kleine Frickelansatz von mir liefert zumindest die Spalten 'ID' |
AW: HAVING mit MAX (alias)
Zitat:
![]() |
AW: HAVING mit MAX (alias)
Was ist damit?
[SQL]select * from test where value = (select max(value) from test);[/SQL] Hat in meinen Tests funktioniert und ist irgendwie das einfachste? Liebe Grüße, Valentinf |
AW: HAVING mit MAX (alias)
Zitat:
Zitat:
Die von Dir zuvor präsentierten Lösungen (auf die Du dich im 'Nö' beziehst) funktionieren ja, aggregieren aber zweimal. Und ich habe eine Alternative vorgeschlagen, in der 'GROUP BY' nur 1x vorkommt. |
AW: HAVING mit MAX (alias)
Code:
Das kann nicht funktionieren, weil Du ein einfaches Aggregat eines Wertes mit einem mehrfachen Aggregat desselben vergleichen willst - was innerhalb einer SQL-Ebene (deren Aggregationsregeln Du mit GROUP BY definierst) unzulässig ist. Du erkennst das daran, daß MAX(ANZ) gruppenübergreifend ermittelt werden soll.
SELECT id, count(wert) as anz
GROUP BY id HAVING (anz = MAX(anz)) Where schränkt übrigens die ursprünglichen Datenmengen ein, d.h. wirkt vor der Gruppierung, kann deshalb die Aggregate nicht kennen. Die folgende Syntax funktioniert (auf mySQL 5.1 getestet)
Code:
"FileExt" wäre Dein "ID", "FileId" entspräche Deinem "wert".
select
FileExt ,count(FileId) as Anz from filetable group by FileExt having Anz=(select max(subanz) from (select count(FileId) as subanz from filetable group by FileExt)as subtab) |
AW: HAVING mit MAX (alias)
Zitat:
|
AW: HAVING mit MAX (alias)
Zitat:
Deine funktionierenden Vorschläge benötigen zwei GROUP BY Durchgänge, dein 'Auszug' kommt zwar nur mit einem GROUP BY aus, hat nichts mit der Lösung zu tun. Aber ich wiederhole mich. Du hast verloren, gib einfach auf. :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz