【问题标题】:summarising a 3 months sales report across 2 branches into top 3 product for each month将 2 个分支机构的 3 个月销售报告汇总为每个月的前 3 个产品
【发布时间】:2014-10-08 11:41:03
【问题描述】:

我有以下 REPORT 表

m = month,
pid = product_id,
bid = branch_id,
s = sales

m       pid     bid     s
--------------------------
1       1       1       20
1       3       1       11
1       2       1       14
1       4       1       16
1       5       1       31
1       1       2       30
1       3       2       10
1       2       2       24
1       4       2       17
1       5       2       41
2       3       1       43
2       5       1       21
2       4       1       10
2       1       1       5
2       2       1       12
2       3       2       22
2       5       2       10
2       4       2       5
2       1       2       4
2       2       2       10
3       3       1       21
3       5       1       10
3       4       1       44
3       1       1       4
3       2       1       14
3       3       2       10
3       5       2       5
3       4       2       6
3       1       2       7
3       2       2       10

我想要这张销售表的摘要 通过显示所有分支机构产品中的前 3 名销售额。 像这样:

m       pid     total
---------------------
1       5       72
1       1       50
1       4       33
2       3       65
2       5       31
2       2       22
3       4       50
3       3       31
3       2       24

所以在第 1 个月,产品 #5 的总销售额最高,为 72,其次是产品 #1,为 50.. 以此类推。如果我可以将它们分成每个月的不同表格会更好

到目前为止,我能做的是总结 1 个月并显示整个事情,而不是前 3 个。

select pid, sum(s)
from report
where m = 1
group by pid
order by sum(s);

非常感谢!

【问题讨论】:

  • 你用的是什么数据库?
  • 大学实验室的 oracle 11g

标签: sql oracle querying


【解决方案1】:

大多数数据库都支持 ANSI 标准窗口函数。你可以用row_number()做你想做的事:

select m, pid, s
from (select r.m, r.pid, sum(s) as s,
             row_number() over (partition by m order by sum(s) desc) as seqnum
      from report r
      group by r.m, r.pid
     ) r
where seqnum <= 3
order by m, s desc;

【讨论】:

  • 嗨,谢谢,它有效,我做了一些修改:1)在第2行的末尾添加一个“,”,可能是oracle的要求。 2)删除最后一行的“pid”,所以只需“order by m, s desc;”到目前为止的输出在这里看起来不错。你怎么看?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多