Hallo
dann funktioniert das wunderbar. Bei
SELECT
lambda,
MAX(CASE WHEN messreihe = 1 THEN messung ELSE NULL END) AS messreferenz,
(MAX(CASE WHEN messreihe = 2 THEN messung ELSE NULL END)-messreferenz) AS messreihe2,
(MAX(CASE WHEN messreihe = 3 THEN messung ELSE NULL END)-messreferenz) AS messreihe3,
(MAX(CASE WHEN messreihe = 5 THEN messung ELSE NULL END)-messreferenz) AS messreihe5
FROM
daten
GROUP BY lambda
>
> ergibt sich nun ein "1054 - Unknown column 'messreferenz' in 'field list'". Ich dachte man könne mit diesen Werten gleich weiterarbeiten?
Nein, kannst Du mit [Spaltenaliasen nicht](http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html).
Daher wäre es
~~~sql
SELECT
lambda,
MAX(CASE WHEN messreihe = 1 THEN messung ELSE NULL END) AS messreferenz,
MAX(CASE WHEN messreihe = 2 THEN messung ELSE NULL END)
- MAX(CASE WHEN messreihe = 1 THEN messung ELSE NULL END AS messreihe2,
MAX(CASE WHEN messreihe = 3 THEN messung ELSE NULL END)
- MAX(CASE WHEN messreihe = 1 THEN messung ELSE NULL END AS messreihe3,
MAX(CASE WHEN messreihe = 5 THEN messung ELSE NULL END)
- MAX(CASE WHEN messreihe = 1 THEN messung ELSE NULL END AS messreihe5
FROM
daten
GROUP BY lambda
Zu Deiner Einschränkung für lambda < 2.2:
Gehe ich Recht in der Annahme, dass es performanter ist zu schreiben
SELECT
lambda,
MAX(CASE WHEN messreihe = 2 AND lambda < 2.2 THEN messung ELSE NULL END) AS messreihe2,
MAX(CASE WHEN messreihe = 3 AND lambda < 2.2 THEN messung ELSE NULL END) AS messreihe3,
MAX(CASE WHEN messreihe = 5 AND lambda < 2.2 THEN messung ELSE NULL END) AS messreihe5
FROM
daten
GROUP BY lambda
HAVING lambda < 2.2
verwendest Du \*nicht\* die HAVING-Klausel sondern die WHERE-Klausel, vergleiche dazu einfach den verlinkten Abschnitt über Aliasnamen
~~~sql
SELECT
lambda,
MAX(CASE WHEN messreihe = 1 THEN messung ELSE NULL END) AS messreferenz,
MAX(CASE WHEN messreihe = 2 THEN messung ELSE NULL END)
- MAX(CASE WHEN messreihe = 1 THEN messung ELSE NULL END AS messreihe2,
MAX(CASE WHEN messreihe = 3 THEN messung ELSE NULL END)
- MAX(CASE WHEN messreihe = 1 THEN messung ELSE NULL END AS messreihe3,
MAX(CASE WHEN messreihe = 5 THEN messung ELSE NULL END)
- MAX(CASE WHEN messreihe = 1 THEN messung ELSE NULL END AS messreihe5
FROM
daten
WHERE
-- Schränke die betrachteten Datensätze ein, bevor ausgewertet und
-- gruppiert wird.
lambda < 2.2
GROUP BY lambda
HAVING schlägt erst dann zu, wenn schon alles ausgewertet wurde. EXPLAIN sollte da Unterschiede aufzeigen.
Freundliche Grüße
Vinzenz