Yadgar: [MySQL 4.0] Maximalwert aus mehreren Spalten ermitteln?

High!

Und weiter geht es mit GREENBOOK, der Datenbank für elektr(on)ische Orgeln...

Mein aktuelles Problem ist folgendes:

Elektr(on)ische Orgeln (auf jeden Fall solche "klassischer" analoger Bauart, aber auch etliche moderne Digitalorgeln) haben üblicherweise eine Hauptregistergruppe namens "Flutes" oder "Tibias" (der bei den Pfeifenorgeln die Prinzipal-Register entsprechen) in verschiedenen Fußlagen (entsprechend der Länge einer Pfeife bezogen auf das eingestrichene c), etwa 16', 8', 5 1/3', 4' usw.

Nun möchte ich die Orgelmodelle in meiner Datenbank gruppiert nach den klassierten Anzahlen dieser Fußlagen anzeigen; meine Tabelle "orgeln" hat dazu fünf Spalten jeweils für die Fußlagenzahl im Pedal, im unteren, oberen, soweit verhanden (andernfalls NULL) auch im dritten und vierten Manual.

Maßgeblich für die Zuordnung zu einer bestimmten Anzahlen-Gruppe ist die Klaviatur (Manual oder Pedal) mit der höchsten Anzahl unterschiedlicher Fußlagen (meistens ist dies das obere bzw. zweite Manual, bei den meisten Sakralorgeln aber das untere bzw. erste Manual, bei drei- oder viermanualigen Orgeln kann es ebenfalls anders sein).

Daher suche ich nach einer Funktion, die pro Datensatz aus mehreren Spalten den jeweils höchsten Wert ermittelt... MAX() ist es jedenfalls nicht! Gibt es überhaupt eine solche Funktion?

Bis bald im Khyberspace!

Yadgar

  1. Daher suche ich nach einer Funktion, die pro Datensatz aus mehreren Spalten den jeweils höchsten Wert ermittelt... MAX() ist es jedenfalls nicht! Gibt es überhaupt eine solche Funktion?

    du könntest mehrere getrennte selects mit union zusammenfassen und die ausgabe jeweils auf einen datensatz beschränken sowie nach genau dieser spalte absteigend sortieren - mit union und max() sollte es aber ebenfalls problemlos funktionieren - zwischen max(XX) und order by XX desc limit 0,1 sollte kein unterschied sein - oder täusche ich mich da?

    die frage ist allerdings, wie die daten vorliegen (datentyp) und ob dann max überhaupt noch sinnvolle reihungen zustande bringt

  2. Hi,

    Daher suche ich nach einer Funktion, die pro Datensatz aus mehreren Spalten den jeweils höchsten Wert ermittelt... MAX() ist es jedenfalls nicht!

    Logisch, das ist ja eine Aggregatfunktion zur Benutzung mit GROUP BY.

    Gibt es überhaupt eine solche Funktion?

    Bender is the ...?

    MfG ChrisB

    --
    "The Internet: Technological marvel of marvels - but if you don't know *what* you're lookin' for on the Internet, it is nothing but a time-sucking vortex from hell."
  3. yo,

    Daher suche ich nach einer Funktion, die pro Datensatz aus mehreren Spalten den jeweils höchsten Wert ermittelt... MAX() ist es jedenfalls nicht! Gibt es überhaupt eine solche Funktion?

    schau mal in der Doku oder in google nach der funktion: GREATEST()

    PS: wäre interessant zu wissen, ob dir die abfrage zu deinem anderen problem geholfen hat. das feedback dazu ist für uns immer interessant.

    Ilja

    1. High!

      schau mal in der Doku oder in google nach der funktion: GREATEST()

      Das funktioniert prima... aber nur, solange ich nur die drei Felder Fusslagen_OM (oberes Manual), Fusslagen_UM (unteres Manual) und Fusslagen_Pedal prüfe! Nehme ich noch Fusslagen_3M und Fusslagen_4M hinzu (für das 3. und 4. Manual, sofern vorhanden) bekomme ich nur "Empty Set"! Der Datentyp ist bei allen fünf Feldern gleich, und für Fusslagen_3M ist gegenwärtig in einem Datensatz ein Eintrag vorhanden, alle anderen Datensätze enthalten dort NULL, ebenso in Fusslagen_4M.

      Wie kommt so etwas zustande? Hat es eventuell mit der Reihenfolge der Argumente zu tun, muss diese exakt der Reihenfolge der Felder in der Tabelle entsprechen?

      Bis bald im Khyberspace!

      Yadgar

      1. yo,

        Wie kommt so etwas zustande? Hat es eventuell mit der Reihenfolge der Argumente zu tun, muss diese exakt der Reihenfolge der Felder in der Tabelle entsprechen?

        die vermutung liegt nahe, das es was mit den NULL werten zu tun hat, du müsstest die NULL werte mit einer weiteren funktion voher abfangen und in den Wert 0 umwandeln.

        Ilja

        1. High!

          die vermutung liegt nahe, das es was mit den NULL werten zu tun hat, du müsstest die NULL werte mit einer weiteren funktion voher abfangen und in den Wert 0 umwandeln.

          Habe ich gemacht, mit IFNULL(Feldname, 0) läuft es jetzt immer einwandfrei!

          Danke für den Tipp!

          Bis bald im Khyberspace!

          Yadgar