rumbledom
Goto Top

MySQL Minimalwert über mehrere Spalten, jedoch nicht 0

Minimalwert auswerten, allerdings nicht 0 (also größer 0)

Hallo,

ich habe eine Tabelle mit mehreren Werten in mehreren Spalten wo ich den Mindestwert bestimmen muss.

Allerdings habe ich das Problem, dass dieser Wert nicht 0 sein darf.

Schema
ID, Wert01, Wert02, Wert03
1, 300, 0, 325 (min is 300)
2, 225, 275, 0 (min is 225)
3, 0, 500, 300 (min is 300)

Vom Prinzip her wäre das eigentlich so, allerdings bekomme ich da immer die 0 ausgewertet:

SELECT min(least(Wert01, Wert02, Wert03)) FROM table ...

Gibt es hierfür überhaupt eine SQL-Syntax oder muss ich dafür einen weiteren Workaround Scriptseitig bauen?

Gruß, Rumble

Content-ID: 201481

Url: https://administrator.de/forum/mysql-minimalwert-ueber-mehrere-spalten-jedoch-nicht-0-201481.html

Ausgedruckt am: 23.12.2024 um 16:12 Uhr

nxclass
nxclass 10.02.2013 um 00:18:11 Uhr
Goto Top
mir fällt da nur das ein:
SELECT ...
CASE
  WHEN `wert1`>0 AND `wert1`<`wert2` AND `wert1` < `wert3` THEN `wert1`
  WHEN `wert2`>0 AND `wert2`<`wert1` AND `wert2` < `wert3` THEN `wert2`
  WHEN `wert3`>0 AND `wert3`<`wert1` AND `wert3` < `wert2` THEN `wert3`
  ELSE 0
END AS 'min'  
FROM ...
Biber
Biber 10.02.2013 um 00:49:25 Uhr
Goto Top
Moin nxclass,

im Prinzip ja, aber...

--> bei einer Konstellation von Wert1/Wert2/Wert3 = 0/1000/1000 oder auch 500/500/1000 kommt als "kleinster Wert ungleich 0" leider 0 heraus.

Die jeweils zweiten "<"-Prüfungen sollten besser als "<=" formuliert werden.

Grüße
Biber
nxclass
nxclass 10.02.2013 um 01:13:11 Uhr
Goto Top
Die jeweils zweiten "<"-Prüfungen sollten besser als "<=" formuliert werden.
absolut richtig

Moin nxclass,
ich geh jetzt ins Bett.
ByteKiller
ByteKiller 10.02.2013 um 11:35:49 Uhr
Goto Top
Moin moin,

also ich würde dir empfehlen noch mal dein Tabllenlayout zu überdenken und evtl. zu änderen, wenn das von deiner Seite aus machbar ist und das Schema nicht fix ist.

Wenn ich das richtig sehe hast du sowas wie mehrere Messreihen, die wiederum mehrere Messdaten haben. Da könnte man Folgendes machen:

Messreihe
ID, Name
1, Reihe 1
2, Reihe 2
...
n, Reihe XYZ

Messpunkte
ID, MessreiheID, Wert
1, 1, 300
2, 1, 0
3, 1, 325
4, 2, 225
5, 2, 275
6, 2, 0
...
m, n, 0
m+1, n, 500
m+2, n, 300
...

Dann kannst du die Tabllen JOINen (anhand der Messreihen ID) und mit einer WHERE Klausel deinen Wert finden.
Würde sagen das wäre eine saubere Lösung.
Gruß
ByteKiller
rumbleDom
rumbleDom 15.02.2013 um 07:44:51 Uhr
Goto Top
Hallo @all,

aufgrund der Performance habe ich jetzt auch das Tabellenlayout dahingehend angepasst, dass der Minimalwert als weitere Spalte bei INSERT oder UPDATE mit geschrieben wird. Nun läuft es wirklich reibungslos. Herzlichen Dank für Eure Hilfe!

Gruß, rumble