惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
小众软件
小众软件
博客园_首页
博客园 - 聂微东
V
V2EX
WordPress大学
WordPress大学
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 司徒正美
博客园 - 三生石上(FineUI控件)
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
SegmentFault 最新的问题
J
Java Code Geeks
Last Week in AI
Last Week in AI
The Cloudflare Blog
月光博客
月光博客
雷峰网
雷峰网
宝玉的分享
宝玉的分享
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Hugging Face - Blog
Hugging Face - Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
有赞技术团队
有赞技术团队
人人都是产品经理
人人都是产品经理
博客园 - Franky
腾讯CDC
Jina AI
Jina AI
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
量子位
爱范儿
爱范儿
美团技术团队
T
Tailwind CSS Blog
博客园 - 【当耐特】
D
Docker
IT之家
IT之家
V
Visual Studio Blog
P
Proofpoint News Feed
L
LangChain Blog
Engineering at Meta
Engineering at Meta
C
Check Point Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
云风的 BLOG
云风的 BLOG
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
Recorded Future
Recorded Future

博客园 - blog of mb459

项目管理实战之团队管理 (转自:zhuweisky) 刘韧专访陈一舟:回顾ChinaRen时代 (ZT) 谈我对攻读计算机研究生的看法 - blog of mb459 个性主张:玩转你的86400秒 全世界所有程序员都会犯的错误-蔡学镛 变态级JAVA程序员面试32问(附答案)(转载) 互联网创业迎来回潮 风投开始第2波网络掘金 认识.NET的集合(转) 学习:怎样才是一个真正的DBA? IT从业人员必看的10大论坛 你为什么离开你以前的公司?(整理自csdn社区) 怎样从一名程序员过度到项目经理(整理自csdn论坛) 一篇不错的讲解Java异常的文章 新技术倍出 谁最可能挑战Java开发优势 我喜欢的10款Freeware 一个关于group by的sql 55种网页常用小技巧(转载) 使用Vs2005打造简单分页浏览器(1) C#中的类型转换(转载)
sql 面试中的问题
blog of mb459 · 2005-12-20 · via 博客园 - blog of mb459

最近有许多学员问了一些面试中的问题,总结起来看,一是关于怎样找出和去除重复数据,这在另一个帖子利已有详细介绍。二是关于找出某一列里最大或最小的前几个,或是大于或小于某一个值(最大值或平均值)的数据。针对这种情况,再此做一个介绍。

1:找出公司里收入最高的前三名员工:

SQL> select rownum, last_name, salary
 2  from (select last_name, salary
 3        from s_emp
 4        order by salary desc)
 5  where rownum<=3;

   ROWNUM LAST_NAME                     SALARY
---------- ------------------------- ----------
        1 Velasquez                       4750
        2 Ropeburn                        2945
        3 Nguyen                        2897.5

注意:请大家分析一下一下语句为什么不对:

SQL> select rownum, last_name, salary
 2  from s_emp
 3  where rownum<=3
 4  order by salary desc;

   ROWNUM LAST_NAME                     SALARY
---------- ------------------------- ----------
        1 Velasquez                       4750
        3 Nagayama                        2660
        2 Ngao                            2000

2: 找出表中的某一行或某几行的数据:

(1):找出表中第三行数据:
用以下方法是不行的,因为rownum后面至可以用<或<=号,不可以用=,>号和其它的比较符号。

SQL> select * from s_emp
 2  where rownum=3;

no rows selected

SQL> select * from s_emp
 2  where rownum between 3 and 5;

no rows selected

正确的方法如下:

SQL> l
 1  select last_name, salary
 2  from (select rownum a, b.*
 3        from s_emp b)
 4* where a=3
SQL> /

LAST_NAME                     SALARY
------------------------- ----------
Nagayama                        2660

(2):找出第三行到第五行之间的数据:
SQL> l
 1  select last_name, salary
 2  from (select rownum a, b.*
 3        from s_emp b)
 4* where a between 3 and 5
SQL> /

LAST_NAME                     SALARY
------------------------- ----------
Nagayama                        2660
Quick-To-See                    2755
Ropeburn                        2945

3:找出那些工资高于他们所在部门的平均工资的员工。

(1):第一种方法:
SQL> select last_name, dept_id, salary
 2  from s_emp a
 3  where salary>(select avg(salary)
 4                from s_emp
 5                where dept_id=a.dept_id);

LAST_NAME                    DEPT_ID     SALARY
------------------------- ---------- ----------
Velasquez                         50       4750
Urguhart                          41       2280
Menchu                            42       2375
Biri                              43       2090
Catchpole                         44       2470
Havel                             45     2483.3
Nguyen                            34     2897.5
Maduro                            41       2660
Nozaki                            42       2280
Schwartz                          45       2090

10 rows selected.

(2):第二种方法:
SQL> l
 1  select a.last_name, a.salary, a.dept_id, b.avgsal
 2  from s_emp a, (select dept_id, avg(salary) avgsal
 3               from s_emp
 4               group by dept_id) b
 5  where a.dept_id=b.dept_id
 6* and a.salary>b.avgsal
SQL> /

LAST_NAME                     SALARY    DEPT_ID     AVGSAL
------------------------- ---------- ---------- ----------
Velasquez                       4750         50     3847.5
Urguhart                        2280         41     2181.5
Menchu                          2375         42 2055.16667
Biri                            2090         43       1710
Catchpole                       2470         44       1995
Havel                         2483.3         45     2069.1
Nguyen                        2897.5         34       2204
Maduro                          2660         41     2181.5
Nozaki                          2280         42 2055.16667
Schwartz                        2090         45     2069.1

10 rows selected.

4:找出那些工资高于他们所在部门的manager的工资的员工。

SQL> l
 1  select id, last_name, salary, manager_id
 2  from s_emp a
 3  where salary>(select salary
 4                from s_emp
 5*               where id=a.manager_id)
SQL> /

       ID LAST_NAME                     SALARY MANAGER_ID
---------- ------------------------- ---------- ----------
        6 Urguhart                        2280          2
        7 Menchu                          2375          2
        8 Biri                            2090          2
        9 Catchpole                       2470          2
       10 Havel                         2483.3          2
       12 Giljum                          2831          3
       13 Sedeghi                       2878.5          3
       14 Nguyen                        2897.5          3
       15 Dumas                           2755          3
       16 Maduro                          2660          6

10 rows selected.