diff --git "a/50 \345\274\240\350\265\267\347\221\236/20231017 \347\252\227\345\217\243\345\207\275\346\225\260\350\241\245\345\205\205.md" "b/50 \345\274\240\350\265\267\347\221\236/20231017 \347\252\227\345\217\243\345\207\275\346\225\260\350\241\245\345\205\205.md" new file mode 100644 index 0000000000000000000000000000000000000000..7eabb5d13cdcd8b6b0ddb3f8cb2fa5f19c59a9c3 --- /dev/null +++ "b/50 \345\274\240\350\265\267\347\221\236/20231017 \347\252\227\345\217\243\345\207\275\346\225\260\350\241\245\345\205\205.md" @@ -0,0 +1,43 @@ +```mysql +#按员工工资进行排序,查询当前员工与前一位和后一位的工资平均值 +SELECT *,avg(salary) over (ORDER BY salary rows BETWEEN 1 preceding AND 1 following) FROM employee; + +#查询各部门中小于等于当前员工实际薪资的比例 +SELECT ename,dname,salary,CUME_DIST() over (PARTITION by dname ORDER BY salary DESC) FROM employee; + +#查询每个员工工资在全部员工中的排名比例 +SELECT ename,dname,salary,CUME_DIST() over ( ORDER BY salary DESC) FROM employee; + +#将所有员工按照工龄分为4个组,并统计每个组的人数 +SELECT ename,hiredate,NTILE(4) over (ORDER BY TIMESTAMPDIFF( YEAR, hiredate, NOW())) FROM employee; + +#将员工按照工资分为3个组,并统计组别,每组平均工资,工资范围(first_value、last_value) +WITH a AS( +SELECT NTILE(3) over (ORDER BY salary) n,salary FROM employee ) +SELECT n,avg(a.salary),max(salary),min(salary) FROM a GROUP BY a.n; + + #返回员工的实际年龄,如果小于当前日期则减1岁 +SELECT + dname, + ename, + DATEDIFF( NOW(), birth )/365 `DAY` +FROM + employee +ORDER BY + birth; + + #求每个员工还有多少天过生日,并返回下次生日是星期几\ +WITH +a as +(SELECT + ename, + birth, + DATEDIFF(DATE_FORMAT(NOW(),'%Y-%m-%d'),CONCAT(YEAR(NOW()),'-',MONTH(birth),'-',DAY(birth))) as `day` FROM employee) + SELECT + a.ename, + if(a.`day`<0,a.`day`+365,a.`day`) `date` + ,DATE_FORMAT( CONCAT( YEAR ( NOW() + INTERVAL 1 YEAR ), '-', MONTH ( a.birth ), '-', DAY ( a.birth )), '%W' ) `week` + FROM a; + +``` +