mysql中如何实现over方法(开窗函数)

作者:dengwang123  发布日期:2014-05-10 08:20:21
mysql 中如何实现over 方法(开窗函数)
 
在绝大多数关系型数据库中都实现了over方法(开窗算法) 。但是mysql是没有实现这个方法。
所以在一下场景下是很难受的。
比如:对同一组中的人员按照成绩排序或只取同一组中的前2名。
 
下面是一个示例。在这里我就不去验证了。
大致讲解一下该sql的含义:
 
set @rank=0;
select * from (
select @pa:=ff.T_PtAccount T_PtAccount,ff.T_Consume,
if(@pa=ff.T_PtAccount,@rank:=@rank+1,@rank:=1) as rank 
 from (select T_PtAccount,T_Consume from tmp02 group by T_PtAccount,T_Consume 
 order by T_PtAccount ,T_Consume desc) ff , 
(select @rank:=0,@rownum:=0,@pa=null) tt ) AA 
-- order by T_PtAccount ,T_Consume
-- where AA.T_PtAccount='alkrgao'
 
核心表是tmp02
先对tmp02 聚合然后排序 ,生成派生表 ff
select T_PtAccount,T_Consume from tmp02 group by T_PtAccount,T_Consume 
 order by T_PtAccount ,T_Consume desc 
 
然后查询ff表
select @pa:=ff.T_PtAccount T_PtAccount,ff.T_Consume,
if(@pa=ff.T_PtAccount,@rank:=@rank+1,@rank:=1) as rank 
 from (select T_PtAccount,T_Consume from tmp02 group by T_PtAccount,T_Consume 
 order by T_PtAccount ,T_Consume desc) ff
 
  (select @rank:=0,@rownum:=0,@pa=null) tt 。
这个地方声明变量 ,可以供ff使用 。对于mysql来说这是一个非常特别的地方。
其他数据系统没见过这种语法。
 
OVER!!!!!!!!!!!!!!!!!!!
Tag标签: mysql  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规