代码之家  ›  专栏  ›  技术社区  ›  Python coder

每年分组,年+9,得到总数

  •  0
  • Python coder  · 技术社区  · 5 年前

    如何为每个不同的年份按特定范围分组(默认情况下,年份是不同的)?

    输入:

    my_table:
    
    year  count
    1961  2
    1963  6
    1969  3
    1975  5
    1976  9
    1978  5
    1983  3
    1984  1
    1985  3
    1986  5
    1987  6
    1989  13
    .
    .
    .
    

    select sum(count) as total_count, 
           (year || '-' || year+9) as year_range 
    from my_table 
    group by year
    

    但是,代码没有给出正确的结果。


    预期产量:

    total_count  year_range
    11           1961-1970
     9           1963-1972
    22           1969-1978
    23           1975-1984
    23           1978-1987
    .
    .
    .
    
    2 回复  |  直到 5 年前
        1
  •  1
  •   forpas    5 年前

    您可以通过自联接和聚合来完成:

    select sum(m2.count) total_count,  
           m1.year || '-' || (m1.year + 9) year_range
    from my_table m1 left join my_table m2
    on m2.year between m1.year and m1.year + 9
    group by m1.year
    

    demo .
    结果:

    > total_count | year_range
    > ----------: | :---------
    >          11 | 1961-1970 
    >           9 | 1963-1972 
    >          22 | 1969-1978 
    >          23 | 1975-1984 
    >          21 | 1976-1985 
    >          23 | 1978-1987 
    >          31 | 1983-1992 
    >          28 | 1984-1993 
    >          27 | 1985-1994 
    >          24 | 1986-1995 
    >          19 | 1987-1996 
    >          13 | 1989-1998 
    
        2
  •  0
  •   Gordon Linoff    5 年前

    可以使用窗口函数;

    select t.*,
           sum(count) over (order by year range between current row and 9 following) as total_count
    from t;
    

    year_range ,但这很简单: year || '-' || year + 9

    Here 是一把小提琴。