一个数据库面试题的多种解法
2007-12-01 22:37
288 查看
考题:现有两张表,以下为表结构
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语句相对简单些。。。。
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语句相对简单些。。。。
相关文章推荐
- 一个数据库面试题,求更好解法
- 有一个5ml 的瓶子 和3ml 的瓶子 和 很多水 现在 要取出4ml的水 请写出编程 多种解法
- 一个变态C/C++面试题的变态解法
- 求两个节点的最近公共祖先多种解法&&判断一个节点是否在二叉树中
- 编程面试题:编写一个会造成数据库死锁的应用
- 一个枚举问题的多种解法
- 一个问题的多种解法:
- 让一个软件系统同时支持多个多种数据库灵活配置,让客户可以任意配置各个核心数据库部分
- 一个常见面试题的解法之我见
- 一个简单的,适应多种数据库之间存取操作的数据库访问层
- 让一个软件系统同时支持多个多种数据库灵活配置,让客户可以任意配置各个核心数据库部分
- 一个简单文本处理问题的多种解法
- 一个数据库面试题
- 一个方便的.net数据库操作类(很容易扩展,以支持多种数据库)
- C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用
- oracle的按月统计sql(一个数据库面试题)
- 一道面试题:三次称量判断十二个球中一个劣质球的解法
- 一道百度java面试题的多种解法
- 给大家推荐一个真正的免费空间,支持asp.net,PHP,多种数据库,空间容量无限
- oracle的按月统计sql(一个数据库面试题)