MySQL - suche eine Art user defined Group by
HI!
hab hier eine MySQL-Tabelle mit folendem Aufbau:
Muss jetzt alle Zeilen bei denen die erste Spalte gleich ist, zusammen bearbeiten.
zB alle Zeilen mit 'C': über die Zweite Spalte den Durchschnitt bilden und alle Zeilen die >10% davon entfernt sind - weiter verarbeiten.
nur ein Beispiel
arbeite mit PHP, mysqli und fetch_assoc()
ein Array mit allen "C"-Zeilen wäre super - so eine Art user defined Group by - gibt es das bei MySQL?
konkret geht es um kompatible und inkompatible Jahresintervalle, die ich je nachdem kombinieren muss. falls das relevant ist.
sg Dirm
hab hier eine MySQL-Tabelle mit folendem Aufbau:
col1 | col2 |
A | 12 |
B | 12 |
B | 34 |
C | 11 |
C | 12 |
C | 23 |
D | 45 |
E | 67 |
E | 78 |
Muss jetzt alle Zeilen bei denen die erste Spalte gleich ist, zusammen bearbeiten.
zB alle Zeilen mit 'C': über die Zweite Spalte den Durchschnitt bilden und alle Zeilen die >10% davon entfernt sind - weiter verarbeiten.
nur ein Beispiel
arbeite mit PHP, mysqli und fetch_assoc()
ein Array mit allen "C"-Zeilen wäre super - so eine Art user defined Group by - gibt es das bei MySQL?
konkret geht es um kompatible und inkompatible Jahresintervalle, die ich je nachdem kombinieren muss. falls das relevant ist.
sg Dirm
Please also mark the comments that contributed to the solution of the article
Content-Key: 190241
Url: https://administrator.de/contentid/190241
Printed on: April 24, 2024 at 16:04 o'clock
5 Comments
Latest comment
... also nur so als Anmerkung würde ich die Spalte years in 2 Spalten splitten start_year und end_year.
Die Spalten könntest Du dann mit einem Update-Stament füllen.
Spielt der Wert in col2 keine Rolle beim Zusammenführen der Datensätze, oder wird da der kleinste oder der größe Wert genommen?
Ich denke das ganze kann man schon mit ein bisschen Überlegung per SQL-Update bzw. über den Umweg einer temporären Tabelle durchziehen. Die Frage ist natürlich wie groß die Tabelle ist und ob sich der Aufwand lohnt.
Gruß Jörg
Die Spalten könntest Du dann mit einem Update-Stament füllen.
Spielt der Wert in col2 keine Rolle beim Zusammenführen der Datensätze, oder wird da der kleinste oder der größe Wert genommen?
Ich denke das ganze kann man schon mit ein bisschen Überlegung per SQL-Update bzw. über den Umweg einer temporären Tabelle durchziehen. Die Frage ist natürlich wie groß die Tabelle ist und ob sich der Aufwand lohnt.
Gruß Jörg
... versuch mal folgendes
Musst Du eventuell noch auf MySQL-Dialekt anpassen. Grundlage hier Oracle.
Gruß Jörg
SELECT a.col1,
MIN(a.col2) col2, -- oder was auch immer hier übernommen werden soll
a.konfig,
c.start_year||'-'||CASE WHEN c.end_year < EXTRACT(YEAR FROM SYSDATE) THEN c.end_year END years
FROM tabelle a
INNER JOIN (SELECT b.col1,
b.konfig,
MIN(SUBSTR(years,1,4)) start_year
MAX(SUBSTR(years,6,4)) end_year
FROM tabelle b
GROUP BY b.col1, b.konfig) c ON a.col1 = c.col1
AND a.konfig = c.konfig
GROUP BY a.col1, a.konfig,
c.start_year || '-' || CASE WHEN c.end_year < EXTRACT(YEAR FROM SYSDATE) THEN c.end_year END
Musst Du eventuell noch auf MySQL-Dialekt anpassen. Grundlage hier Oracle.
Gruß Jörg