列出年龄在前 25% 的学生信息

博客探讨如何在MySQL中列出年龄位于前25%的学生信息,涉及排序、自定义变量@row_num和round()函数的使用。作者指出,通过自定义变量的:=赋值实现数据增长,并提供相关SQL示例,但对自定义变量如何自动增长感到困惑,希望得到解答。
摘要由CSDN通过智能技术生成

思路: 拿到前 25% 的数据,首先得排序,然后最后的条件还有某个列小于 总体排序后个数的 25% 

这个列要随着排的表自动增长,这里使用了 自定义变量@row_num,然后还有 round() 函数,这两样之前都没有接触过. 自定义变量的赋值要用 := 赋值.

 

因为是 MYSQL, 不支持这种写法:

SELECT TOP 50 PERCENT * from (SELECT * FROM tb_student ORDER BY age DESC) a;

 

进入正题:

tb_student(sid,NAME,age,sex,mobilephone,address) 

SQL:

SELECT student.* ,(@row_num:=@row_num + 1) rid FROM 
(SELECT @row_num:=0) t1,
(SELECT * FROM tb_student ORDER BY age DESC) student
WHERE (@row_num)<(SELECT ROUND(COUNT(*)/4) FROM tb_student);

或者这样:

SELECT  a.*, @rownum FROM (SELECT @rownum:=0) rid  JOIN (SELECT * FROM tb_student ORDER BY age DESC) a
WHERE (@rownum:=@rownum+1)<=(SELECT ROUND(COUNT(*)*0.25) FROM tb_student);

虽然拆开看我都知道什么意思,也能自己写出来,但是 我还是不太明白 它这个自定义变量怎

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值