Как заставить MySQL MAX () считать NULL наименьшим возможным значением?
Вопрос
У меня есть запрос, который выглядит примерно так:
SELECT weekEnd, MAX(timeMonday)
FROM timesheet
GROUP BY weekEnd
Допустимые значения для timeMonday: null, -1, 0, 1-24. В настоящий момент MAX () размещает предпочтения этих значений в порядке нуля, -1, 0, 1-24, однако, что я на самом деле хочу, это -1, нуля, 0, 1-24, так что значение нуля считается выше чем -1. Я знаю, что MAX не может этого сделать, так каков самый простой способ добиться этого?
Решение
ВЫБЕРИТЕ WeekEnd, MAX (объединение (timeMonday, -. 5)) ОТ расписания GROUP BY weekEnd
Затем преобразуйте -.5 обратно в ноль
Другие советы
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
заменить NULL на -0,5 при расчете MAX, а затем вернуть его в NULL.
(синтаксис MS SQL Server)
SELECT weekEnd, MAX(COALESCE(timeMonday, '-0.1'))
FROM timesheet
GROUP BY weekEnd
Изменить: еще не проверял это
SELECT weekEnd, REPLACE(MAX(COALESCE(timeMonday, '-0.1')), '-0.1', 'null')
FROM timesheet
GROUP BY weekEnd
Не связан с StackOverflow