2016-09-22 4 views
0

У меня есть таблица, которая содержит продолжительность в минутах. Я хотел бы добавить их, но когда продолжительность составляет менее 45 минут, чтобы вернуть 60 минут.SUM минут с условием

Мой запрос ничего не возвращает и так:

SUM(CASE WHEN duration = 45 THEN duration=60 ELSE 0 END) AS t_dur1 , 
SUM(CASE WHEN duration > 45 THEN duration ELSE 0 END) AS t_dur2 

Любые мысли?

+0

Помимо приведенного ниже ответа могут быть другие причины, по которым вы не получаете результаты. Вставьте свой полный запрос и образцы данных/ожидаемый результат для улучшения ответа – Utsav

ответ

1

Принимая вашу логику буквально, вам нужно всего лишь один CASE заявления:

SUM(CASE WHEN duration < 45 THEN 60 ELSE duration END) AS t_dur 

Это считается длительностями, которые менее, чем 45 минут, как быть 60 минут, в противном случае он рассчитывает исходное значение длительности.

Вы, вероятно, использовать это в GROUP BY запроса ищет что-то вроде этого:

SELECT some_col, 
     SUM(CASE WHEN duration < 45 THEN 60 ELSE duration END) AS t_dur 
FROM yourTable 
GROUP BY some_col 
+0

Мне понравилось однострочное решение! – user1795074

0

кажется, что вам нужно использовать разные операторы сравнения для вашей логики:

SUM(CASE WHEN duration < 45 THEN 60 ELSE 0 END) AS t_dur1 , 
SUM(CASE WHEN duration >= 45 THEN duration ELSE 0 END) AS t_dur2 

Ваш запрос

CASE WHEN duration = 45 THEN duration = 60 

всегда будет возвращать false, что на самом деле равно 0. Примечание t шляпа, например, Postgres будет поднимать ошибку говоря что-то вроде ниже:

типа СЛУЧАЯ целых и логические не сообразуйтесь

Вы также можете комбинировать оба эти заявления СЛУЧАЕВ в одно:

SUM(CASE WHEN duration < 45 THEN 60 ELSE duration END) AS t_dur 
Смежные вопросы