Как подсчитать диапазон в sql?

У меня есть данные, которые выглядят так:

 $ Time        : int  0 1 5 8 10 11 15 17 18 20 ...
 $ NumOfFlights: int  1 6 144 91 504 15 1256 1 1 578 ...

Колонка времени — всего 24 часа. От 0 до 2400

Что я надеюсь получить:

   hour      |   number of flight
-------------------------------------
   1st       |        240
   2nd       |        223
   ...       |        ...
   24th      |        122 

Где 1-й час — с полуночи до 1:00, 2-й — с 1:00 до 2:00 и так далее до 24-го, то есть с 23:00 до полуночи. И количество полетов — это просто общее количество NumOfFlights в пределах диапазона.

Я пробовал:

dbGetQuery(conn,"
           SELECT
             flights.CRSDepTime AS Time,
             COUNT(flights.CRSDepTime) AS NumOnTimeFlights
           FROM flights
           GROUP BY CRSDepTime/60 
           ")

Но я понимаю, что так нельзя. Результаты, которые я получу, будут иметь 40 значений времени.

> head
  Time NumOnTimeFlights
1   50             6055
2  105             2383
3  133              674
4  200              446
5  245              266
6  310               34

> tail
   Time NumOnTimeFlights
35 2045            48136
36 2120           103229
37 2215            15737
38 2245            36416
39 2300            15322
40 2355             8018
can't be done this way. Почему? Если вы получаете сообщение об ошибке, опубликуйте сообщение об ошибке. В противном случае опубликуйте результаты и объясните, почему они неверны.
SOS 23.03.2022 07:03

ах да, я забыл добавить это. Теперь это отредактировано.

Leo 23.03.2022 07:23

Если, например, в столбце «Время» есть значение 1000, какое время оно представляет?

forpas 23.03.2022 13:56

1000 это 10 утра

Leo 24.03.2022 05:48

Тогда в чем проблема с ответом Серга?

forpas 24.03.2022 12:01
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
5
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если ваш столбец CRSDepTime представляет собой целочисленное закодированное время, например HHmm, то CRSDepTime/100 извлечет час.

       SELECT
         CRSDepTime/100 AS hh,
         COUNT(flights.CRSDepTime) AS NumOnTimeFlights
       FROM flights
       GROUP BY CRSDepTime/100

Я считаю, что это не так, это просто целочисленный тип данных. как проверить, закодирован ли мой столбец как время?

Leo 23.03.2022 09:27

Ваши данные, например. 38 2245 36416 похоже, что время 22:45 закодировано как 22*100 + 45 целое число

Serg 23.03.2022 09:46

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