W jaki sposób mogę posortować wynik zapytania według aliasu, w zagnieżdżonym warunku z wykorzystaniem funkcji agregującej?
Mam zapytanie, które sortuje wg. col_type i col_min / col_max (w zależności od col_type).
SELECT MAX(CASE
WHEN attr = 10 THEN value
END) AS col_type,
MAX(CASE
WHEN attr = 20 THEN value
END) AS col_min,
MAX(CASE
WHEN attr = 30 THEN value
END) AS col_max
FROM TABLE
ORDER BY col_type,
CASE WHEN MAX(CASE
WHEN attr = 10 THEN value
END) = 1 THEN MAX(CASE
WHEN attr = 20 THEN value
END)
CASE WHEN MAX(CASE
WHEN attr = 10 THEN value
END) = 2 THEN MAX(CASE
WHEN attr = 30 THEN value
END)
Chcę dodać jeszcze sortowanie według col_max dla przypadku gdy col_type jest równe 1.
SELECT MAX(CASE
WHEN attr = 10 THEN value
END) AS col_type,
MAX(CASE
WHEN attr = 20 THEN value
END) AS col_min,
MAX(CASE
WHEN attr = 30 THEN value
END) AS col_max
FROM TABLE
ORDER BY col_type,
CASE WHEN MAX(CASE
WHEN attr = 10 THEN value
END) = 1 THEN (MAX(CASE
WHEN attr = 20 THEN value
END), MAX(CASE
WHEN attr = 30 THEN value
END))
CASE WHEN MAX(CASE
WHEN attr = 10 THEN value
END) = 2 THEN MAX(CASE
WHEN attr = 30 THEN value
END)
Nie działa, zgłasza błąd:
Operand should contain 1 column (s).
Najlepiej by to było zrobić aliasami np.:
SELECT MAX(CASE
WHEN attr = 10 THEN value
END) AS col_type,
MAX(CASE
WHEN attr = 20 THEN value
END) AS col_min,
MAX(CASE
WHEN attr = 30 THEN value
END) AS col_max
FROM TABLE
ORDER BY col_type,
CASE WHEN MAX(CASE
WHEN attr = 10 THEN value
END) = 1 THEN (col_min, col_max)
CASE WHEN MAX(CASE
WHEN attr = 10 THEN value
END) = 2 THEN MAX(CASE
WHEN attr = 30 THEN value
END)
Tutaj także nie przejdzie, wyrzuca:
Reference col_min, col_max not supported.
Da się coś takiego uzyskać w mysql?
Czy to zbyt ubogi język na takie działania?