失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 经典sql语句 行专列 统计部门男女人数 统计员工入职时常 根据出生日期计算年龄

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

时间:2022-09-11 07:00:54

相关推荐

经典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年的员工

部门表

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,这个无疑是最优秀的一个,但是美中不足的是 当我把出生日期写成-11-25 11:26:51的时候计算的年龄为0,因为当前时间是-11-25 22:21:51这样按实际情况应该刚好一岁的,不过,把出生日期改为-11-24 11:26:51就是1了 也就是说有一天和实际情况不符合。如果您有更优的方案,希望不吝赐教,谢谢。

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

如果觉得《经典sql语句 行专列 统计部门男女人数 统计员工入职时常 根据出生日期计算年龄》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。