选用数据库:MySQL
一、导入数据
●下载题目所需文件SQL1、SQL2
sql1.sql
●打开Navicat,连接数据库,把文件拖入表
二、题目
1.查询各个年龄段的人数,结果输出年龄段及对应的人数,按年龄段升序排序答案:
#SQL语句如下:
select 年龄段,count(*) 人数from (
select 年龄,
case
when 年龄<=24 then '24岁及以下'
when 年龄between 25 and 29 then '25-29岁'
when 年龄between 30 and 34 then '30-34岁'
when 年龄between 35 and 39 then '35-39岁'
when 年龄between 40 and 44 then '40-44岁'
when 年龄between 45 and 49 then '45-49岁'
when 年龄between 50 and 54 then '50-54岁'
when 年龄>=55 then '55岁及以上'
end as 年龄段
from SQL1) t
group by 年龄段
order by 年龄段asc
而年龄段在表格中已有划分结果,所以SQL语句可以简化为:
select 年龄段,count(*) 人数from SQL1
where 年龄段in ('24岁及以下','25-29岁','30-34岁','35-39岁',
'40-44岁','45-49岁','50-54岁','55岁及以上' )
group by 年龄段
order by 年龄段asc
#查询结果:
2.查询每个工龄区间的人数,结果输出工龄区间及对应的人数,按人数降序排序三年以下(工龄<3)
三年~七年(3<=工龄<7)
mysql group by order by七年~十年(7<=工龄<10)
十年~十五年(10<=工龄<15)
十五年及以上(15<=工龄)
答案:
#SQL语句如下:
select 工龄段,count(*) 人数from (
select 工龄,
case
when 工龄< 3 then '三年以下'
when 工龄between 3 and 6 then '三年~七年'
when 工龄between 7 and 9 then '七年~十年'
when 工龄between 10 and 14 then '十年~十五年'
when 工龄>= 15 then '十五年及以上'
end as 工龄段
from SQL1) t
group by 工龄段
order by 人数desc
#查询结果:
3.查询姓名重复三次的人员ID,结果以人员ID降序排序
答案:
#SQL语句如下:
可以先查询三次重复的姓名:
select 人员姓名from SQL1
group by 人员姓名
having count(*)=3
再嵌入查询:
select a.人员姓名,b.ID
from SQl1 b,
(select 人员姓名from SQL1
group by 人员姓名
having count(*)=3) a
where a.人员姓名= b.人员姓名
order by b.ID desc
#查询结果:
4.查询每个公司岗位类别为‘一般管理’的人员中,各个学历的占比,结果输出,公司、学
历、占比
答案:
首先筛选出每个公司岗位类别为一般管理的人员学历:
select 公司简称as 公司,学历
from SQL1
where 岗位类别= '一般管理'
order by 公司,学历
接着算占比,占比需要先求出每种学历在每个公司中的具体数量
select a.公司,a.学历,count(*) 人数from
(select 公司简称as 公司,学历
from SQL1
where 岗位类别= '一般管理'
order by 公司,学历) a
where a.学历in ('专科','本科','研究生','高中' )
group by a.公司,a.学历
占比数据需要从上面查询出的表格获取,最后需要的字段为公司、学历、占比,
所以SQL语句为:
select b.公司,b.学历,b.人数/sum(b.人数) over(partition by b.公司) 占比
from b
#SQL语句如下:
select b.公司,b.学历,b.人数/sum(b.人数) over(partition by b.公司) 占比
from
(select a.公司,a.学历,count(*) 人数from
(select 公司简称as 公司,学历
from SQL1
where 岗位类别= '一般管理'
order by 公司,学历) a
where a.学历in ('专科','本科','研究生','高中' )
group by a.公司,a.学历
) b
#查询结果:
5.查询去掉最大年龄,最小年龄后人员的平均年龄(要求使用NOT EXISTS) 答案:
#SQL语句如下:
select avg(a.年龄) as 平均年龄
from SQL1 a
where not EXISTS
(select 1 from
( select max(年龄) as 年龄from SQL1
union all
select min(年龄) as 年龄from SQL1
) b
where a.年龄= b.年龄
)
#查询结果:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。