如何计算 sql 中的范围?

How to I count a range in 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 点,第二个小时是凌晨 1 点到凌晨 2 点,依此类推直到最后的 24 日,即从晚上 11 点到午夜。而航班数量就是范围内的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

如果您的 CRSDepTime 列是像 HHmm 这样的整数编码时间,那么 CRSDepTime/100 将提取小时。

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