¿Cómo hacer que MySQL MAX () considere NULL el valor más pequeño posible?
Pregunta
Tengo una consulta que se parece un poco a esto:
SELECT weekEnd, MAX(timeMonday)
FROM timesheet
GROUP BY weekEnd
Los valores válidos para timeMonday son: nulo, -1, 0, 1-24. En este momento, MAX () coloca la preferencia de esos valores en el orden nulo, -1, 0, 1-24, sin embargo, lo que realmente quiero es -1, nulo, 0, 1-24, por lo que nulo se considera más alto que -1. Sé que MAX no puede hacer esto, ¿cuál es la forma más fácil de lograrlo?
Solución
SELECT weekEnd, MAX (coalesc (timeMonday, -. 5)) DE parte de horas GRUPO POR FIN DE SEMANA
Luego convierta -.5 de nuevo a nulo
Otros consejos
SELECT weekEnd, CASE WHEN maxTimeMonday = -0.5 THEN NULL ELSE maxTimeMonday END maxTimeMonday
FROM (
SELECT weekEnd, MAX(CASE WHEN timeMonday IS NULL THEN -0.5 ELSE timeMonday END) maxTimeMonday
FROM timesheet
GROUP BY weekEnd) T
reemplazando NULL por -0.5 al calcular MAX y luego revertirlo a NULL.
(sintaxis de MS SQL Server)
SELECT weekEnd, MAX(COALESCE(timeMonday, '-0.1'))
FROM timesheet
GROUP BY weekEnd
Editar: no he probado esto
SELECT weekEnd, REPLACE(MAX(COALESCE(timeMonday, '-0.1')), '-0.1', 'null')
FROM timesheet
GROUP BY weekEnd
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow