经典sql语句 行专列 统计部门男女人数 统计员工入职时常 根据出生日期计算年龄

在这里插入图片描述
切记where后面不能跟直接跟聚合函数
1,SELECT ,COUNT() FROM dept d LEFT JOIN emp e ON d.deptno=e.deptno WHERE e.sal<4000 GROUP BY d.deptno
查询部门工资低于4000的人数
2,
表数据
create table tb(姓名 varchar(10),课程 varchar(10),分数 int)
insert into tb values(‘张三’,‘语文’,74)
insert into tb values(‘张三’,‘数学’,83)
insert into tb values(‘张三’,‘物理’,93)
insert into tb values(‘李四’,‘语文’,74)
insert into tb values(‘李四’,‘数学’,84)
在这里插入图片描述
利用 if语句进行行转列
SELECT 姓名,SUM(IF(课程=“语文”,分数,0)) AS 语文,
SUM(IF(课程=“数学”,分数,0)) AS 数学,
SUM(IF(课程=“物理”,分数,0)) AS 物理 FROM tb GROUP BY 姓名

– 使用case when (SQL2000以上)
select 姓名,
max(case 课程 when ‘语文’ then 分数 else 0 end)语文,
max(case 课程 when '数学’then 分数 else 0 end)数学,
max(case 课程 when '物理’then 分数 else 0 end)物理
from tb
group by 姓名

员工表,查询入职满5年的员工
员工表,查询入职满5年的员工在这里插入图片描述
部门表
在这里插入图片描述
SELECT * FROM COM WHERE entry<=DATE_SUB(SYSDATE(),INTERVAL 5 YEAR);

统计各部门的的男女员工数

SELECT d.dname,
SUM(CASE WHEN sex = ‘女’ THEN 1 ELSE 0 END) 女,
SUM(CASE WHEN sex = ‘男’ THEN 1 ELSE 0 END) 男 FROM com c LEFT JOIN dept d ON d.id = c.deptId GROUP BY deptId

还有一个方法
SELECT d.id,d.dname,c.sex,COUNT(*) FROM com c ,dept d WHERE d.id=c.deptId GROUP BY c.deptId , c.sex
在这里插入图片描述
另外大家可以注意一下
CASE WHEN sex = ‘女’ THEN 1 ELSE 0 END
CASE 课程 when ‘语文’ then 分数 else 0 end
这两中不同写法

计算每门成绩不低于60分的学生姓名
表数据
在这里插入图片描述方法1:SELECT DISTINCT(NAME) FROM sc WHERE id NOT IN (SELECT DISTINCT(id) FROM sc WHERE score <60)
方法2
SELECT NAME FROM sc GROUP BY NAME HAVING MIN(score)>60
查询结果
在这里插入图片描述

根据出生日期计算年龄
SELECT *,TIMESTAMPDIFF(YEAR,entry,CURDATE())AS 年龄 FROM com
在这里插入图片描述
这是我找了好多根据出生日期计算年龄的sql,这个无疑是最优秀的一个,但是美中不足的是 当我把出生日期写成2018-11-25 11:26:51的时候计算的年龄为0,因为当前时间是2019-11-25 22:21:51这样按实际情况应该刚好一岁的,不过,把出生日期改为2018-11-24 11:26:51就是1了 也就是说有一天和实际情况不符合。如果您有更优的方案,希望不吝赐教,谢谢。

结束语:写的可能有点乱,请见谅。各位有不明白的地方可以给我留言。我一定会即使回复的。

发布了19 篇原创文章 · 获赞 5 · 访问量 1944
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览