找回密码
 骑士注册

QQ登录

微博登录

搜索
❏ 站外平台:

查看: 5126|回复: 7
收起左侧

一条sql语句的面试题,大家谁能答出来

  [复制链接]
robin 发表于 2011-05-16 17:42:03 | 显示全部楼层 |阅读模式
本帖最后由 robin 于 2011-5-16 17:46 编辑

有一张表t_stu;其中三个字段:name,gender,grade;要求用一条sql语句查出男生grade前5名和女生grade前五名。
用mysql:
用Oracle:
分别怎么答???

DeadFire 发表于 2011-05-19 10:22:24 | 显示全部楼层

你的答案有了么?

 楼主| robin 发表于 2011-05-19 11:04:43 | 显示全部楼层
本帖最后由 robin 于 2011-5-19 11:06 编辑

select * from (select* from t_stu where gender=1 order by grade desc) where rownum<=5 
union 
select * from (select* from t_stu where gender=0 order by grade desc )where rownum<=5;

但是肯定有更好的答案

 

 


 

windnestlinux 发表于 2011-05-19 11:11:49 | 显示全部楼层

要是前5名中有成绩相同的怎么办?

wxy 发表于 2011-05-19 11:34:50 | 显示全部楼层

非要做联合么?

withoutpity 发表于 2011-05-19 13:52:36 | 显示全部楼层
本帖最后由 withoutpity 于 2011-5-19 13:53 编辑

具体语句不会写。

不过我想思路应该是这样的,通过按性别汇总出性别用什么东东表示,然后再在库中按性别的查询。

按思路瞎写一个,估计是肯定运行不了的:

select * from t_stu where name in (select name from t_stu where gender = (seletc gender from (select count(*) as dws,gender from t_stu order by gender DESC ) next 1 ) order by grade) or name in (select name from t_stu where gender = (seletc gender from (select count(*) as dws,gender from t_stu order by gender ) next 1 ) order by grade);

 楼主| robin 发表于 2011-05-19 14:30:15 | 显示全部楼层
本帖最后由 robin 于 2011-5-19 14:32 编辑

回复 windnestlinux 的帖子

如果有相同成绩的话应该

SELECT a.* FROM t_stu a INNER JOIN ((SELECT GROUP_CONCAT(Id) AS Id FROM t_stu where gender=1 GROUP BY grade DESC LIMIT 5) union all (SELECT GROUP_CONCAT(Id) AS Id FROM t_stu where gender=0 GROUP BY grade DESC LIMIT 5)) b ON FIND_IN_SET(a.id,b.Id)>0 ORDER BY grade DESC

但这样出来就不是10条数据了,也对,我一开始没有考虑到相同成绩的,只考虑了取2种性别的前5条数据

文剑一飞 发表于 2014-07-09 15:46:54 | 显示全部楼层
  1. select rownum,name,grade from t_stu where grade in (select rownum, grade from t_stu where
  2. gender=1 and rownum<6 order by grade dest) join
  3. select rownum,name,grade from t_stu where grade in (select rownum, grade from t_stu where
  4. gender=2 and rownum<6 order by grade dest) on rownum;
复制代码


未经检验

您需要登录后才可以回帖 登录

本版积分规则

快速回复 返回顶部 返回列表

分享到微信

打开微信,点击顶部的“╋”,
使用“扫一扫”将网页分享至微信。