Ausgabe des höchsten Wertes einer Zeile aus eine MYSQL Datenbank
Kristina
- datenbank
- mysql
Ich habe in einem Datensatz die Spalten Januar, Februar, März u.s.w
in jeder Zelle steht eine Zahl, ein Wert.
Wenn ich in jetzt die Tabelle auslese,
SELECT * FROM table
bekomme ich ja alle Daten der jeweiligen Zeile angezeigt.
Wie schaffe ich es, das mir nur der Monat ausgeben wird, mit dem höchsten Wert?
Hallo Kristina,
Ich habe in einem Datensatz die Spalten Januar, Februar, März u.s.w
ob das sinnvoll ist? Bin nicht sicher.
Wie schaffe ich es, das mir nur der Monat ausgeben wird, mit dem höchsten Wert?
Grundsätzlich: SELECT MAX(spalte) FROM Tabellenname
Aber um genauer, wären mehr Infos hilfreich.
Abfrage über mehrere Spalten, evtl. Doppelwerte, Spaltentyp....
Gruss
Henry
Tach!
Ich habe in einem Datensatz die Spalten Januar, Februar, März u.s.w
Sieht nach einem schlechten Design aus. Warum sind das mehrere Spalten und nicht nur eine "Monat".
Wie schaffe ich es, das mir nur der Monat ausgeben wird, mit dem höchsten Wert?
Nicht so einfach. Du kannst nicht nur einzelne Spalten nach bestimmten Kriterien in die Ausgabe aufnehmen, nur Datensätze können gefiltert werden. Dort wäre es recht einfach mit einem Group-by.
Ich würde die Suche nach dem gewünschten Monat clientseitig vornehmen, wenn du das Datenschema nicht ändern kannst/möchtest.
dedlfix.
name total Januar Februar März April Mai Juni Juli August September Oktober November Dezember
das sind meine Spalten
Tach!
name total Januar Februar März April Mai Juni Juli August September Oktober November Dezember
das sind meine Spalten
Das macht es nicht besser. Es gibt meines Wissens keine gescheite Lösung für das Problem. Wenn du es datenbankseitig lösen möchtest, wirst du um eine Stored Function nicht umhinkommen, in der du dann eine ähnliche Gymnastik wie auf dem Client vornehmen musst.
dedlfix.
Hi,
Ich habe in einem Datensatz die Spalten Januar, Februar, März u.s.w
in jeder Zelle steht eine Zahl, ein Wert.
ob das so schlau ist?
Wenn ich in jetzt die Tabelle auslese,
SELECT * FROM table
bekomme ich ja alle Daten der jeweiligen Zeile angezeigt.
Wie schaffe ich es, das mir nur der Monat ausgeben wird, mit dem höchsten Wert?
greatest(spalte1, spalte2, spalte3, ...) könnte helfen.
cu,
Andreas a/k/a MudGuard
Tach!
Wie schaffe ich es, das mir nur der Monat ausgeben wird, mit dem höchsten Wert?
greatest(spalte1, spalte2, spalte3, ...) könnte helfen.
Das gibt zwar den größten Wert, aber noch nicht den Monatsnamen dazu.
dedlfix.
Hello,
Wie schaffe ich es, das mir nur der Monat ausgeben wird, mit dem höchsten Wert?
greatest(spalte1, spalte2, spalte3, ...) könnte helfen.
Das gibt zwar den größten Wert, aber noch nicht den Monatsnamen dazu.
Da könnte es ja auch passieren, dass mehrere Zellen "den größten Wert" enthalten.
Man müsste dann also auf jeden Fall auf eine Ergebnismenge geßasst sein und nicht nur auf ein einzelnes Name-Value-Paar. Das wird für so einfache Datenbanken, wie MySQL & Co. schon schwierig.
Liebe Grüße
Tom S.
Hello,
Model nicht zuende entwickelt / normalisiert wurde Dir ja schon gesagt.
Willst Du nur den höchsten Wert oder willst Du auch wissen, in welcher Spalte der einen Zeile der steckt?
es steht Dir frei, den "größten Wert" einer kommaseparierten Liste von Werte mit greatest(value1, value2, ..., valueN)
abzufragen. Damit bekommst Du aber leider nicht den Spaltennamen.
also select greatest(jan, feb, mrs, apr, may, ...) from mytable where id = $n
;
Liebe Grüße
Tom S.
Hallo Kristina,
Da deine Tabelle nicht normalisiert ist, musst du entweder dein DB Design ändern oder Dir einen normalisierten View erzeugen.
Create view tabview as
Select Name, 'Jan' as monat, januar as wert from table
Union all
Select Name, 'Feb' as monat, februar as wert from table
Union all
...
Union all
Select Name, 'Dez' as monat, dezember as wert from table
Basierend darauf kannst du nun so abfragen;
Select Name, a.Monat, a.wert
From tabview a Join (select Name,Max(wert) as maxwert from tabview Group by Name) b on a.Name=b.Name and a.wert=b.maxwert
Vermutlich ist das nicht schnell. Dafür rettet es dein „Datenmodell“.
Ein redesign des Modells ist auf jeden fall der bessere Weg
Rolf