LAG聚合问题

时间:2016-05-19 21:04:40

标签: sql postgresql

假设我有一个包含以下列的表。

yr      mo     group    players

年是四位数的年份20xx,月份是两位数的月份,组是唯一的群组标识符 - 数字和玩家是给定年份的玩家数量。

我正在尝试 - 并且失败 - 编写一个查询,每个月输出以下内容:

  • 当前期间的群组数
  • 一年后的一组人数,
  • 群组数量的差异

AND(这是我真正被困的部分) 看看当前时期的群组 - 将他们与具有相同身份识别的群体配对,并计算出玩家的净差异。

作为一个基本的例子,如果1,2,3组在1,2014分别有3,4,5和1,2组,其中2,3和1的球员,那么球员的差异将是 - 2,组间的差异为1。

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

SELECT 
  COUNT(DISTINCT p2.grp) as grp_current_period,
  COUNT(DISTINCT p1.grp) AS grp_last_year,
  COUNT(DISTINCT p2.grp) - COUNT(DISTINCT p1.grp) AS grp_diff,
  SUM(CASE WHEN p1.grp IS NULL THEN 0 
      ELSE SUM(p2.players - p1.players) 
  END) as players_diff
FROM 
  myTable p2 LEFT JOIN 
  myTable p1 ON p2.mo = p1.mo AND 
                p2.yr = p1.yr - 1 AND
                p2.grp = p1.grp
GROUP BY p2.yr, p2.mo 

在这里,我加入当前月/年到前一年,如果球队不存在,则球员差异设置为零。