选择按参数分组的最大值

时间:2018-03-31 14:46:40

标签: python sql python-3.x sqlite

我有一些事故数据,我试图通过SQLite3在Python中查询。我试图确定一周中哪一天在特定年月对中发生的事故最多。数据包含以下字段:

意外:Accident_Index |年|月| DAY_OF_WEEK

其中Day_of_Week的范围是1-7,星期日是1.结果应按年份升序,然后是几个月,新表应包含以下列:

max_dayofweek:年|月| Day_of_Week | Num_of_Accidents

到目前为止,我有以下内容:

query = '''
    SELECT Year, Month, Day_of_Week, count(*) as Num_of_Accidents
    from Accidents
    group by Year, Month, Day_of_Week
    order by Year, Month
'''
max_dayofweek = pd.read_sql_query(query, conn)

但是这会回来:

    Year    Month   Day_of_Week     Num_of_Accidents
0   2009    1       1               623
1   2009    1       2               1095
2   2009    1       3               1197
3   2009    1       4               1244
4   2009    1       5               1123
5   2009    1       6               1404
6   2009    1       7               1114
7   2009    2       1               592
8   2009    2       2               919
9   2009    2       3               887
10  2009    2       4               1013
11  2009    2       5               915
12  2009    2       6               1032
13  2009    2       7               824

但输出应该如下:

    Year    Month   Day_of_Week     Num_of_Accidents
0   2009    1       6               1404
1   2009    2       6               1032

等等......

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

在SQLite中,您可以这样做:

with ym as (
      select Year, Month, Day_of_Week, count(*) as Num_of_Accidents
      from Accidents
      group by Year, Month, Day_of_Week
     )
select ym.*
from ym
where ym.Num_of_Accidents = (select max(ym2.Num_of_Accidents)
                             from ym ym2
                             where ym2.year = ym.year and ym2.month = ym.month
                            )
order by Year, Month;

那就是说,你的计算可能会被取消,因为有些dows在一个月内出现四次,有些出现五次(除非你使用某种财政日历)。很遗憾,您没有具体的日期,因此您无法将其考虑在内。