如何组内排名
【问题】
表结构如下:
领用日期 物品名称 规格 单价 数量 领用人
2015-01-01 U盘 32G 35 1 张三
2015-01-01 U盘 64G 30 2 张三
2015-01-01 U盘 32G 35 1 李四
2015-01-01 硬盘 500G 300 3 李四
2015-02-01 U盘 500G 300 3 李四
我要用sql语句查询出以下效果,请问sql语句要怎样写?
1月领用人排名表
物品名称 领用人 数量 金额 数量排名 金额排名
U盘 张三 3 95 1 1
U盘 李四 1 35 2 2
硬盘 李四 3 300 1 1
【回答】
支持分析函数的数据库可以使用rank完成组内排名,SPL更通用、简单,只需两句脚本:
A |
|
1 |
$select 物品名称,领用人,sum(单价*数量) 金额,sum(数量) 数量 from tb group by 物品名称,领用人 order by物品名称,数量 desc |
2 |
=A1.derive(ranki(数量;物品名称):数量排名,数量排名:金额排名) |
A1:执行SQL,按物品和领用人分组并汇总数量和金额,结果按物品名称和数量排序
A2:增加数量排名和金额排名两列,在每个物品范围内计算数量和金额的排名
写好的脚本如何在应用程序中调用,可以参考Java 如何调用 SPL 脚本