как разбить столбец на несколько значений с помощью другого - PullRequest
0 голосов
/ 06 марта 2012

У меня есть следующая таблица: дата, час, происшествия

Мне нужно узнать количество несчастных случаев днем ​​и ночью.

Вот как получить его за день

ВЫБЕРИТЕ дату, СУММА (ДТП) КАК «в день» ОТ АВТОМОБИЛЕЙ, ГДЕ ДАТА> = «2012-01-01» И ДАТА <= «2012-01-31» И ЧАС> = «00: 00:00» И ЧАС <= '11:59:59' ГРУППА ПО ДАТЕ </p>

Как изменить запрос, чтобы он также имел место ночью?

Ответы [ 4 ]

0 голосов
/ 06 марта 2012

Я добавляю сюда, но;

SELECT date,SUM(CASE WHEN HOUR>='00: 00:00' AND HOUR<=' 11:59:59
THEN accidents ELSE 0 END)
AS 'at day',
SUM(CASE WHEN HOUR>='12: 00:00' AND HOUR<=' 23:59:59
THEN accidents ELSE 0 END) AS 'at night' 
FROM vehicles 
WHERE DATE>='2012-01-01 'AND DATE<='2012-01-31'
GROUP BY date
0 голосов
/ 06 марта 2012

Ночью и днем ​​- весь день, поэтому просто удалите условие ЧАС

SELECT date, SUM(accidents) AS 'at day' FROM vehicles WHERE DATE>='2012-01-01 'AND DATE<='2012-01-31' GRUUP BY date
0 голосов
/ 06 марта 2012

Вы можете опустить условие WHERE в ЧАС и GROUP BY

SELECT date, 
       IF(HOUR BETWEEN '00:00:00' AND '11:59:59','day','night') as period,
       SUM(accidents) as numAccidents
FROM vehicles
WHERE Date >= '2012-01-01' AND DATE <= '2012-01-31'
GROUP BY Date, IF(HOUR BETWEEN '00:00:00' AND '11:59:59','day','night')

Это вычисляет «ночь» или «день» с использованием конструкции IF(condition,then,else) (обратите внимание, что в зависимости от типа вашего часового столбца вам, возможно, придется использовать HOUR >= '00:00:00' AND HOUR <= '11:59:59' вместо BETWEEN).

Затем группируются по дате и дню / ночи, чтобы получить общую сумму за день и период.

0 голосов
/ 06 марта 2012

Вы можете использовать union

SELECT date, SUM(accidents) AS 'at day', '' as 'at night'
FROM vehicles 
WHERE DATE>='2012-01-01 ' AND DATE<='2012-01-31' 
AND HOUR>='00: 00:00' AND HOUR<=' 11:59:59 '
GROUP BY date
union
SELECT date, '', as 'at day', SUM(accidents) AS 'at night' 
FROM vehicles 
WHERE DATE>='2012-01-01 ' AND DATE<='2012-01-31' 
AND HOUR>='12: 00:00' AND HOUR<=' 23:59:59 '
GROUP BY date

или case:

SELECT date, '', as 'at day', 
       SUM(accidents) AS 'sum_accidents', 
       case `HOUR` between '00: 00:00' and '11:59:59' THEN 'night' ELSE 'day' END as 'night_or_day'
FROM vehicles 
WHERE DATE>='2012-01-01 ' AND DATE<='2012-01-31' 
GROUP BY date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...