2013-09-10 3 views
1

Допустим, я получил запрос следующим образом:SQL Select заявления - более чем один выходной столбец

select count(*) as Morning from Table 
where timestamp between '01.08.13 06:00:00' AND '01.08.13 10:00:00' 

Теперь я хотел бы иметь выход на полдень и вечером. Да, я мог бы сделать три запроса, но можно ли создать оператор select, который возвращает все три (утро, полдень, вечер)?

+3

Вы отметили это как для Oracle, так и для MySQL. Какую базу данных вы используете? Синтаксис, вероятно, будет отличаться между ними. –

ответ

4
select sum(case when timestamp between '01.08.13 06:00:00' 
            and '01.08.13 10:00:00' 
       then 1 
       else 0 
      end) as Morning, 
     sum(case when timestamp between '01.08.13 10:00:00' 
            and '01.08.13 14:00:00' 
       then 1 
       else 0 
      end) as Noon, 
     sum(case when timestamp between '01.08.13 14:00:00' 
            and '01.08.13 18:00:00' 
       then 1 
       else 0 
      end) as Evening 
from Table 
+0

, но суммирует() возвращает счет здесь? просто пытаясь понять, лучше ли count()? – skv

+2

@skv для подсчета вам понадобится 'COUNT (IF (отметка времени между '01 .08.13 06:00:00 'и '01 .08.13 10:00:00', 1, NULL))' - это просто сложнее , 'SUM' будет делать трюк легче. –

+1

Внутренний оператор в 'sum()' будет возвращать '1', если' true'. Функция sum суммирует случаи, когда true. –

Смежные вопросы