Как выбрать «ноль», если есть нуль, или «макс», если в противном случае в группе выбрано?

Это упрощенный пример запроса, который я хочу выполнить:

select
  t.id,
  case when any(st.end_at is null) then null else max(st.end_at) end as max_end_at
from table as t
join sub_table as st on st.table_id = t.id
group by t.id;

Я хочу получить максимум st.end_at, но если какое-либо из вхождений равно нулю, я хочу null

Очевидно, any() не работает :/

Каким должен быть правильный подход?

решение ниже работает так, как ожидалось? если нет, можете ли вы поделиться примерами данных и результатами

trillion 29.08.2024 11:31

Привет @trillion, да, это сработало. Ответ принят. Спасибо!

fguillen 29.08.2024 13:48

рад это слышать. Спасибо

trillion 29.08.2024 16:14
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  • count(*) подсчитывает общее количество строк (включая ноль)
  • count(st.end_at) учитывает только ненулевые значения

Используемая логика: Если счетчики не совпадают, это означает, что что-то равно нулю, поэтому возвращается значение null, в противном случае возвращается максимальное значение даты.

select
  t.id,
  case when count(s.end_at) = count(*) then max(s.end_at) end as max_end_at
from table as t
join sub_table as st 
  on st.table_id = t.id
group by 
  t.id

вы также можете использовать IFF в снежинке:

    iff(count(s.end_at) = count(*), max(s.end_at),null) as max_end_at

работает с обоими вариантами + iff тоже можно использовать.

trillion 29.08.2024 12:46

Другие вопросы по теме