求排名的SQL
时间:2011-06-01
来源:互联网
用户积分排行求前100名,名次是并列的。
即:相同积分的用户并列名次,如何查询?
即:相同积分的用户并列名次,如何查询?
作者: jiajianhui2009 发布时间: 2011-06-01
贴建表及插入记录的SQL,及要求结果出来看看
思路:
先将所有分数排名,再与工作表连接
思路:
先将所有分数排名,再与工作表连接
作者: wwwwb 发布时间: 2011-06-01
貌似没有sqlserver的并列排名的函数
作者: rucypli 发布时间: 2011-06-01
确实没有,所以要先计算所有分数排名,用变量、查询解决,再与工作表连接
作者: wwwwb 发布时间: 2011-06-01
SQL code
mysql> select * from tab; +------+-------+ | name | score | +------+-------+ | A | 80 | | B | 90 | | C | 99 | | D | 95 | | E | 75 | | F | 90 | | G | 80 | +------+-------+ 7 rows in set (0.00 sec) mysql> SET @b=0,@c=0; Query OK, 0 rows affected (0.00 sec) mysql> SELECT NAME,score,rank FROM ( -> SELECT NAME,@a:=score AS score,@b:=IF(@c<>@a,@b+1,@b) AS rank,@c:=@a AS d ummy -> FROM tab ORDER BY score DESC -> ) a; +------+-------+------+ | NAME | score | rank | +------+-------+------+ | C | 99 | 1 | | D | 95 | 2 | | B | 90 | 3 | | F | 90 | 3 | | A | 80 | 4 | | G | 80 | 4 | | E | 75 | 5 | +------+-------+------+ 7 rows in set (0.00 sec)
作者: mr_mablevi 发布时间: 2011-06-01
-- ----------------------------
-- Table structure for `tb_user`
-- ----------------------------
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (
`id` int(11) unsigned NOT NULL auto_increment,
`name` varchar(50) default NULL,
`score` int(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tb_user
-- ----------------------------
INSERT INTO `tb_user` VALUES ('1', 'aaa', '150');
INSERT INTO `tb_user` VALUES ('2', 'bbb', '150');
INSERT INTO `tb_user` VALUES ('3', 'ccc', '120');
INSERT INTO `tb_user` VALUES ('4', 'ddd', '100');
INSERT INTO `tb_user` VALUES ('5', 'eee', '90');
INSERT INTO `tb_user` VALUES ('6', 'fff', '90');
INSERT INTO `tb_user` VALUES ('7', 'ggg', '80');
INSERT INTO `tb_user` VALUES ('8', 'hhh', '70');
INSERT INTO `tb_user` VALUES ('9', 'iii', '60');
INSERT INTO `tb_user` VALUES ('10', 'jjj', '50');
INSERT INTO `tb_user` VALUES ('11', 'kkk', '40');
INSERT INTO `tb_user` VALUES ('12', 'lll', '30');
--现在按score列排序,查询前10名
-- -----------------------------------
--名次 用户 分数
-- 1 aaa 150
-- 1 bbb 150
-- 2 ccc 120
-- 3 ddd 100
-- 4 eee 90
-- 4 fff 90
-- 5 ggg 80
-- 6 hhh 70
-- 7 iii 60
-- 8 jjj 50
-- 9 kkk 40
-- 10 lll 30
-- 要求:1.分数相同的并列名次
-- 2.考虑可能用户数量少,排名排不到第10名
-- Table structure for `tb_user`
-- ----------------------------
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (
`id` int(11) unsigned NOT NULL auto_increment,
`name` varchar(50) default NULL,
`score` int(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tb_user
-- ----------------------------
INSERT INTO `tb_user` VALUES ('1', 'aaa', '150');
INSERT INTO `tb_user` VALUES ('2', 'bbb', '150');
INSERT INTO `tb_user` VALUES ('3', 'ccc', '120');
INSERT INTO `tb_user` VALUES ('4', 'ddd', '100');
INSERT INTO `tb_user` VALUES ('5', 'eee', '90');
INSERT INTO `tb_user` VALUES ('6', 'fff', '90');
INSERT INTO `tb_user` VALUES ('7', 'ggg', '80');
INSERT INTO `tb_user` VALUES ('8', 'hhh', '70');
INSERT INTO `tb_user` VALUES ('9', 'iii', '60');
INSERT INTO `tb_user` VALUES ('10', 'jjj', '50');
INSERT INTO `tb_user` VALUES ('11', 'kkk', '40');
INSERT INTO `tb_user` VALUES ('12', 'lll', '30');
--现在按score列排序,查询前10名
-- -----------------------------------
--名次 用户 分数
-- 1 aaa 150
-- 1 bbb 150
-- 2 ccc 120
-- 3 ddd 100
-- 4 eee 90
-- 4 fff 90
-- 5 ggg 80
-- 6 hhh 70
-- 7 iii 60
-- 8 jjj 50
-- 9 kkk 40
-- 10 lll 30
-- 要求:1.分数相同的并列名次
-- 2.考虑可能用户数量少,排名排不到第10名
作者: jiajianhui2009 发布时间: 2011-06-01
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28