MySQL_ mysql 不用 order by 实现 第K大 功能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL_ mysql 不用 order by 实现 第K大 功能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1384字,纯文字阅读大概需要2分钟。
内容图文
![MySQL_ mysql 不用 order by 实现 第K大 功能](/upload/InfoBanner/zyjiaocheng/916/1384ee1c7dbd4b0da02ea0fa8ee0e496.jpg)
mysql 竟然可以不用 order by 就能实现第 K 大的功能,这是怎么实现的呢?本文将讲述 如何 不用 order by 实现 第 k大数 的功能。
首先,我们构建一张表,只存储了 用户 id 与 年龄 age .
建表语句如下:
CREATE TABLE `sc` (
`id` int(11) DEFAULT NULL,
`score` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
插入的数据如下:
-- ----------------------------
-- Records of sc
-- ----------------------------
INSERT INTO `sc` VALUES ('1', '43');
INSERT INTO `sc` VALUES ('2', '30');
INSERT INTO `sc` VALUES ('3', '86');
INSERT INTO `sc` VALUES ('4', '66');
INSERT INTO `sc` VALUES ('5', '25');
INSERT INTO `sc` VALUES ('6', '46');
INSERT INTO `sc` VALUES ('7', '77');
思路:
因为不能使用 order by 对 数据排序,这里我们考虑的方法是 根据 id 分组,求出有多少个数据 小于等于 当前值。则为当前id的排名。
SQL 如下:
SELECT
s2.id,
s2.score,
COUNT(*) myrank
FROM
sc s2,
(SELECT score FROM sc) s3
WHERE
s2.score <= s3.score
GROUP BY s2.id
查询结果:
id score myrank
1 43 5
2 30 6
3 86 1
4 66 3
5 25 7
6 46 4
7 77 2
求第2名
select id, max(score) ma
from sc
where score < (select max(score) from sc )
求第N名
查询第3名,因为已经按照 group by 统计过排名,我们只需要用 having 对数据过滤即可 :
下面是求第三名的SQL
SELECT
s2.id,
s2.score,
COUNT(*) myrank
FROM
sc s2,
(SELECT score FROM sc) s3
WHERE
s2.score <= s3.score
GROUP BY s2.id
HAVING myrank = 3
内容总结
以上是互联网集市为您收集整理的MySQL_ mysql 不用 order by 实现 第K大 功能全部内容,希望文章能够帮你解决MySQL_ mysql 不用 order by 实现 第K大 功能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。