锁定老帖子 主题:一道淘宝的考察sql语句的面试题
精华帖 (0) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-05-05
小弟当时没做出来,只用最笨的办法解决: select name,grade from t_stu m where gender = 1 order by grade limit 1,2 union select name,grade from t_stu f where gender = 0 order by grade limit 1,2; 但回来后,发现这个也是错的,说union和order by错误用法,想了很久,终于有一个答案: select f.name,f.gender,f.grade,m.name,m.gender,m.grade,(f.grade+m.grade) gg from t_stu m, t_stu f where m.gender != f.gender m.name != f.name group by gg order by gg limit 1,3; 运行这个之后,感觉很不爽。希望看到这篇文章的朋友能给我找到一个好的答案。 还有,如果用oracle数据库怎么实现,还没试过,下面是我在mysql中的建表语句: CREATE TABLE `t_stu` ( `id` int(4) NOT NULL DEFAULT '0', `name` varchar(16) DEFAULT NULL, `gender` int(2) DEFAULT NULL, `grade` int(4) DEFAULT NULL, PRIMARY KEY (`id`) )DEFAULT CHARSET=utf8 | 插入测试数据: insert into t_stu values(1,"Alex",1,91); insert into t_stu values(2,"Elena",0,92); 附另外一道在别处碰到的sql题: 有一张表t_game,记录了游戏玩家的id,游戏玩家名name,和每个玩家玩的游戏game,请找出玩游戏最多的那个玩家,我用的子查询,先count每个游戏玩家玩的游戏数,然后max最大游戏数的玩家名。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-05-05
tb也不过如此。oracle可以用固有的函数搞定的。
|
|
返回顶楼 | |
发表时间:2011-05-05
cectsky 写道 tb也不过如此。oracle可以用固有的函数搞定的。
没有,是一道简单的题,我自己没做出来 |
|
返回顶楼 | |
发表时间:2011-05-05
select * from t_stu a where 5>(select count(*) FROM t_stu where gender=a.gender AND grade>a.grade) order by a.grade desc |
|
返回顶楼 | |
发表时间:2011-05-05
(select * from t_stu where gender = 0 order by grade desc limit 5)
union all (select * from t_stu where gender = 1 order by grade desc limit 5) 这个不是想要的结果吗? |
|
返回顶楼 | |
发表时间:2011-05-07
use student
select top 10 * from stu where Sex='true' order by Sex asc select top 10 * from stu where Sex='false' order by Sex asc 我的是sqlsever 的数据库,希望对你有帮助 |
|
返回顶楼 | |
发表时间:2011-05-07
isaacfu_454 写道
select * from t_stu a where 5>(select count(*) FROM t_stu where gender=a.gender AND grade>a.grade) order by a.grade desc +1 |
|
返回顶楼 | |
发表时间:2011-05-07
没明白需求是什么,什么的前5名?GRADE?
CREATE TABLE T_STU( ID NUMBER(38), NAME VARCHAR2(20), GENDER NUMBER(1), GRADE NUMBER(4) ); truncate table t_stu; insert into t_stu values(1,'Alex',1,91); insert into t_stu values(2,'Elena',0,92); insert into t_stu values(3,'Alex2',1,81); insert into t_stu values(4,'Elena2',0,82); insert into t_stu values(5,'Alex3',1,71); insert into t_stu values(6,'Elena3',0,72); insert into t_stu values(7,'Alex4',1,61); insert into t_stu values(8,'Elena4',0,62); insert into t_stu values(9,'Alex5',1,51); insert into t_stu values(10,'Elena5',0,52); insert into t_stu values(11,'Alex6',1,101); insert into t_stu values(12,'Elena6',0,1022); --无排名的 SELECT * FROM T_STU WHERE GENDER=1 AND ROWNUM<=5 UNION ALL SELECT * FROM T_STU WHERE GENDER=0 AND ROWNUM<=5 --按GRADE排名的 SELECT * FROM(SELECT * FROM T_STU WHERE GENDER=1 ORDER BY GRADE DESC) where rownum<=5 UNION ALL SELECT * FROM (SELECT * FROM T_STU WHERE GENDER=0 ORDER BY GRADE DESC )where rownum<=5; |
|
返回顶楼 | |
发表时间:2011-05-07
isaacfu_454 写道
select * from t_stu a where 5>(select count(*) FROM t_stu where gender=a.gender AND grade>a.grade) order by a.grade desc
|
|
返回顶楼 | |
发表时间:2011-05-07
设计了一组数据,上面的答案都不正确,最大的问题是,分数前五名的同学,人数不止5个人。
INSERT INTO `t_stu` VALUES ('1', 'Alex', '1', '91'); INSERT INTO `t_stu` VALUES ('2', 'Elena', '0', '92'); INSERT INTO `t_stu` VALUES ('3', '33', '1', '92'); INSERT INTO `t_stu` VALUES ('4', '44', '1', '92'); INSERT INTO `t_stu` VALUES ('5', '55', '1', '98'); INSERT INTO `t_stu` VALUES ('6', '66', '1', '98'); INSERT INTO `t_stu` VALUES ('7', '77', '1', '98'); INSERT INTO `t_stu` VALUES ('8', '88', '1', '92'); |
|
返回顶楼 | |