一个数据库面试题的多种解法
来源:互联网 发布:淘宝怎么搜索金冠店铺 编辑:程序博客网 时间:2024/05/16 04:37
考题:现有两张表,以下为表结构
create table dep(
depid int identity primary key, --部门号
depname varchar(20) -- 部门名称
)
create table emp(
empid int identity primary key, --员工号
empname varchar(20), --员工姓名
salary money, --工资
depid int --部门号
)
问题:
1、请用一条sql语句查询出各部门的平均工资。结果显示为如下形式:
部门号 平均工资
--------------------------
1 2500.4521
2 2845.0121
这个比较简单,不过有几种方式。
正解1:
select depid 部门号, avg(salary) 平均工资
from emp
group by depid
正解2:
select t1.depid 部门号,avg(t2.salary) 平均工资
from dep t1
inner join emp t2 on t1.depid=t2.depid
group by t1.depid
正解3:
select 部门号=depid,平均工资=avg(salary) from emp group by depid
2、请列出工资大于本部门平均工资的员工姓名和部门号以及统计此部门的人数。结果显示为如下形式:
EMPNAME DEPID 部门人数
---------------------------------
ZHANGSAN 1 15
LISI 2 10
这个有点难度,我试了半天都没解决。
正解1:
SELECT T1.empname,T1.depid,T2.部门人数
FROM dbo.emp T1
INNER JOIN
(select t1.depid, avg(t2.salary) AS salary, COUNT(empid) AS 部门人数
from dep t1
inner join dbo.emp t2 on t1.depid=t2.depid
group by t1.depid) T2 ON T1.depid=T2.depid
WHERE T1.salary>T2.salary
正解2:
select empname,emp.depid,s 部门人数 from emp Inner Join (select depid,avg(salary) a,count(1) s from emp group by depid) b on emp.depid=b.depid and salary>a
第二条sql语句相对简单些。。。。
- 一个数据库面试题的多种解法
- 一个数据库面试题,求更好解法
- 一个常见面试题的解法之我见
- 一个变态C/C++面试题的变态解法
- 一个变态C/C++面试题的变态解法
- 一个C++面试题的数组和STL解法
- 【动态规划】 Google面试题 爬楼梯问题 斐波那契问题的多种解法
- 剑指offer——面试题46:求1+2+...+n的多种解法
- 一个数据库面试题
- 一个枚举问题的多种解法
- Google 的一道面试题的解法
- 微软的一道面试题的解法
- 两个经典面试题的解法
- 【转】一道Google面试题的解法
- 一道网易面试题的解法
- 一道面试题,我的解法
- 一道莫名其妙的华为面试题解法
- 一道面试题的多种想法
- 我使用过的文本编辑器及其历程(ZT)
- Emacs入门导引
- Emacs学习手记(2-4)
- Linux问题汇总
- JAVA面试经典问题
- 一个数据库面试题的多种解法
- shell script 控制结构(未完)
- man使用技巧(未完)
- Linux下的C编程基础--转自CSDN(含内容emacs,Gcc.Gdb,make,vi)
- 图书索引创建器
- JAVA面试经典问题2
- BLP.3th.editon--Learning Processing
- JAVA面试经典问题3
- 有关const指针