Mysql排名功能的实现
2017-01-10 14:40
204 查看
Mysql不像Oracle那样有方便的排名函数可以直接使用,要实现排名功能要稍微费点周折。
1、建表及数据初始化
2、查询:相同数值自动排名(没有并列)
3、查询:相同数值相同排名(无空名次)
4、查询:相同数值相同排名(有空名次)
5、生产使用一例
1、建表及数据初始化
drop table if exists t_rank; CREATE TABLE t_rank ( pid INT(4) PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL, age INT(3), groupid INT ); INSERT INTO t_rank(NAME,age,groupid) VALUES ('Peter', 19, 1), ('Andre',20, 1), ('Vino',20, 3), ('John',25, 3), ('Tom',24, 4), ('Brian',21, 4), ('Andy',22, 3), ('George',23, 4), ('Dew',23, 4), ('Kris',25, 4), ('Samual',25, 4), ('William',26, 2);
2、查询:相同数值自动排名(没有并列)
-- 相同数值自动排名(没有并列) SELECT pid, NAME, age, @curRank := @curRank + 1 AS rank FROM t_rank r,(SELECT @curRank := 0) t ORDER BY age
3、查询:相同数值相同排名(无空名次)
-- 相同数值相同排名(无空名次) SELECT pid, NAME, age, CASE WHEN @preRank = age THEN @curRank WHEN @preRank := age THEN @curRank := @curRank + 1 END AS rank FROM t_rank r, (SELECT @curRank := 0, @preRank := NULL ) t ORDER BY age
4、查询:相同数值相同排名(有空名次)
-- 相同数值相同排名(有空名次) SELECT pid, NAME, age, @rownum := @rownum + 1 AS tmp, @incrnum := CASE WHEN @rowtotal = age THEN @incrnum WHEN @rowtotal := age THEN @rownum END AS rownum FROM ( SELECT pid, NAME, age FROM t_rank ORDER BY age DESC ) AS a,(SELECT @rownum := 0, @rowtotal := NULL, @incrnum := 0) b -- 不展示中间过程 select pid,name,age,rownum from ( SELECT pid, NAME, age, @rownum := @rownum + 1 AS tmp, @incrnum := CASE WHEN @rowtotal = age THEN @incrnum WHEN @rowtotal := age THEN @rownum END AS rownum FROM ( SELECT pid, NAME, age FROM t_rank ORDER BY age DESC ) AS a,(SELECT @rownum := 0, @rowtotal := NULL, @incrnum := 0) b) x
5、生产使用一例
SELECT B.data_week, (SELECT COUNT(1) + 1 FROM (select distinct data_week from bi_user_remain_pay_byweek ) A WHERE concat(substr(A.data_week,1,4),lpad(substr(A.data_week,6),2,0)) < concat(substr(B.data_week,1,4),lpad(substr(B.data_week,6),2,0))) PM FROM (select distinct data_week from bi_user_remain_pay_byweek ) B ORDER BY PM;
相关文章推荐
- mysql 简单实现排名功能
- MYSQL实现排名及查询指定用户排名功能(并列排名功能)实例代码
- 【MySQL】SQL语句实现简单的排名功能
- mysql实现行号和排名功能
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能.
- PHP+MySQL+jQuery实现贴便签功能
- MySql中类似于 SELECT INTO功能的实现
- 具有负载均衡功能MySQL服务器集群部署实现
- jQuery(Ajax)/PHP/MySQL实现搜索自动提示功能
- mysql-mmm------实现mysql互为主从复制HA功能
- JSP+MySQL实现分页功能
- php+mysql实现仿微博短网址跳转功能
- 如何使用struts2结合MySQL实现分页功能?
- MySQL如何实现数组功能
- PHP+MYSQL+SESSION+ThinkPHP实现简单购物车功能
- 具有负载均衡功能的MySQL服务器集群部署及实现
- mysql实现TOP N功能
- MySQL使用递归存储过程实现树状结构,实现Oracle的Connect By 功能
- 具有负载均衡功能的MySQL服务器集群部署及实现
- 通配符*匹配功能在MYSQL查询中的 个人的一点点思路与实现