MySQL после группировки по значению get с предпочтением null

0

У меня есть набор данных, где я могу использовать группу. Я хочу, желательно, получить нулевое значение, если оно доступно (хотите знать, если событие не завершено)

example eventTable:

ID event finished
1 event1 2017-01-01
2 event2 NULL
3 event3 2017-05-18
4 event1 NULL

SQL:

SELECT event, max(finished) FROM eventTable group by event 

дает нежелательный результат:

event1 2017-01-01
event2 NULL
event3 2017-05-18

результат я хочу (см. значение NULL в event1):

event1 NULL
event2 NULL
event3 2017-05-18

Какие-либо предложения? Спасибо.

Теги:
group-by

3 ответа

2
Лучший ответ

Вы можете использовать условную агрегацию, чтобы проверить, существует ли нуль, а затем показать null еще показать max даты

SELECT event, 
case when sum( finished is null) > 0
     then null else max(finished)
end as finished
FROM eventTable 
group by event 

DEMO

  • 1
    очень хорошее решение, но я думаю, что вы должны написать "сумма (закончено равно NULL)> 0"
  • 0
    @DanielE. Семантически оба одинаковы, но ваш читабельнее
Показать ещё 2 комментария
1

Используйте некоторую дату будущего:

SELECT event, max(ifnull(finished, '2999-01-01')) 
FROM eventTable 
group by event ;
0

Используйте MIN вместо MAX. Попробуй это -

SELECT event
      ,min(finished) 
FROM eventTable 
GROUP BY event 
  • 0
    min дает тот же результат, что и max - кажется, что эти агрегаты предпочитают ненулевые значения, если они доступны

Ещё вопросы

Сообщество Overcoder
Наверх
Меню