查看: 8534|回复: 28

这是我在塔塔公司笔试碰到的一个SQL问题,大家帮忙解决?

[复制链接]
论坛徽章:
0
跳转到指定楼层
1#
发表于 2008-7-31 20:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,有一个Employee的表,写SQL语句查处工资排在第三高的人员的信息,工资是这个中的一个字段。。还有查出倒数第二高的人员信息。
2,如何不用distinct来查询不同结果记录
论坛徽章:
0
2#
 楼主| 发表于 2008-7-31 20:53 | 只看该作者

这是我在塔塔公司笔试碰到的一个SQL问题,大家帮忙解决?

1,有一个Employee的表,写SQL语句查处工资排在第三高的人员的信息,工资是这个中的一个字段。。还有查出倒数第二高的人员信息。
2,如何不用distinct来查询不同结果记录

使用道具 举报

回复
论坛徽章:
121
问答徽章
日期:2013-11-13 14:11:01罗罗诺亚·索隆
日期:2017-06-09 08:39:36NBA季后赛纪念徽章
日期:2017-06-14 17:29:37NBA季后赛大富翁
日期:2017-06-15 09:15:27NBA季后赛之星
日期:2017-06-15 09:54:39NBA季后赛之星
日期:2017-06-15 09:54:37ITPUB15周年纪念
日期:2017-10-25 14:43:05乌索普
日期:2017-11-03 10:56:43山治
日期:2017-12-19 11:56:32娜美
日期:2018-01-11 22:38:07
3#
发表于 2008-7-31 21:43 | 只看该作者
第一个要试一下,第二个用group by 可以做到

使用道具 举报

回复
论坛徽章:
519
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
4#
发表于 2008-7-31 21:54 | 只看该作者
select * from (select emp.*, rank() over (order by salary desc) as rank from emp) where rank=3;

如果倒数把 DESC 去掉。

使用道具 举报

回复
论坛徽章:
6
奥运会纪念徽章:皮划艇静水
日期:2008-10-24 13:20:44生肖徽章2007版:蛇
日期:2008-11-03 08:51:45祖国60周年纪念徽章
日期:2009-10-09 08:28:002011新春纪念徽章
日期:2011-02-18 11:42:50ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04蛋疼蛋
日期:2013-01-05 10:01:22
5#
发表于 2008-7-31 22:13 | 只看该作者
select * from (select 工资,rownum RN from Table_name order by 工资 desc) AA where AA.RN=3;

使用道具 举报

回复
论坛徽章:
87
2015年新春福章
日期:2015-03-06 11:58:182010广州亚运会纪念徽章:轮滑
日期:2010-09-23 17:19:212010年世界杯参赛球队:乌拉圭
日期:2010-07-14 17:54:242010年世界杯参赛球队:美国
日期:2010-06-30 13:13:582010年世界杯参赛球队:墨西哥
日期:2010-06-25 12:49:452010年世界杯参赛球队:墨西哥
日期:2010-04-05 10:23:502010新春纪念徽章
日期:2010-03-01 11:06:232010新春纪念徽章
日期:2010-01-04 08:33:08生肖徽章2007版:龙
日期:2009-11-12 16:31:13参与WIN7挑战赛纪念
日期:2009-11-09 11:50:09
6#
发表于 2008-7-31 22:14 | 只看该作者
第二个用UNIQUE

使用道具 举报

回复
论坛徽章:
69
生肖徽章2007版:羊
日期:2008-11-14 14:42:19复活蛋
日期:2011-08-06 08:59:05ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主4段
日期:2012-05-15 15:24:11
7#
发表于 2008-8-1 09:21 | 只看该作者
原帖由 fengzhiwu_2008 于 2008-7-31 22:13 发表
select * from (select 工资,rownum RN from Table_name order by 工资 desc) AA where AA.RN=3;

老兄, 曾有不少 Rownum 的讨论贴, 你这个是有问题的.

使用道具 举报

回复
论坛徽章:
1088
金色在线徽章
日期:2007-04-25 04:02:08金色在线徽章
日期:2007-06-29 04:02:43金色在线徽章
日期:2007-03-11 04:02:02在线时间
日期:2007-04-11 04:01:02在线时间
日期:2007-04-12 04:01:02在线时间
日期:2007-03-07 04:01:022008版在线时间
日期:2010-05-01 00:01:152008版在线时间
日期:2011-05-01 00:01:342008版在线时间
日期:2008-06-03 11:59:43ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30
8#
发表于 2008-8-1 09:46 | 只看该作者
TOP-N分析应该是三层嵌套查询

[ 本帖最后由 dingjun123 于 2008-8-1 09:56 编辑 ]

使用道具 举报

回复
论坛徽章:
1088
金色在线徽章
日期:2007-04-25 04:02:08金色在线徽章
日期:2007-06-29 04:02:43金色在线徽章
日期:2007-03-11 04:02:02在线时间
日期:2007-04-11 04:01:02在线时间
日期:2007-04-12 04:01:02在线时间
日期:2007-03-07 04:01:022008版在线时间
日期:2010-05-01 00:01:152008版在线时间
日期:2011-05-01 00:01:342008版在线时间
日期:2008-06-03 11:59:43ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30
9#
发表于 2008-8-1 10:11 | 只看该作者
drop table t_emp;
create table t_emp(id number(10),name varchar2(10),salary number(10,2));
insert into t_emp values(1,'jack',10000.50);
insert into t_emp values(2,'jack2',8000.50);
insert into t_emp values(3,'jack3',120000);
insert into t_emp values(4,'jack4',5000);
commit;

select * from t_emp;

--查询工资第三高的
select rn,name,salary from (select rownum rn,name,salary from
          (select name,salary from t_emp order by salary desc)) where rn=3;
         
--查询倒数第2的
select rn,name,salary from (select rownum rn,name,salary from
          (select name,salary from t_emp order by salary)) where rn=2;


---------------------------------------------------------------------------------模拟distinct-------------------------------------------------
这个题目和剔除重复行是一样的概念,剔除重复行是找出有那些重复的,一般保留一条,模拟distinct,我们就是找出重复行中的一条就可以了,
其他不重复的同样加上
-------------------------------------test---------------------------------------------------------------------------------------------------------------
drop table t_distinct;
create table t_distinct(id number,name varchar2(10));

insert into t_distinct values(1,'dj');
insert into t_distinct values(1,'dj');
insert into t_distinct values(1,'dj');
insert into t_distinct values(2,'dj');
insert into t_distinct values(3,'dj1');
insert into t_distinct values(3,'dj');
insert into t_distinct values(4,'dj1');
insert into t_distinct values(5,'dj2');
commit;

--模拟distinct
select t1.id,t1.name from t_distinct t1 where t1.rowid =
(select max(t2.rowid) from t_distinct t2 where t1.id=t2.id and t1.name=t2.name);

---下面的也行
select unique id,name from t_distinct;

select id,name from t_distinct group by id,name;

[ 本帖最后由 dingjun123 于 2008-8-1 10:29 编辑 ]

使用道具 举报

回复
论坛徽章:
4
10#
发表于 2008-8-1 11:03 | 只看该作者
原帖由 nyfor 于 2008-8-1 09:21 发表

老兄, 曾有不少 Rownum 的讨论贴, 你这个是有问题的.



rownum 是代表记录的插入顺序,也就是记录在表里面的排列顺序,不会由于order by 而改变。
不知道是否是这个意思?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表