作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想从这样的表中找出工资差距最大的月份:
salary_table
ID Salary fromdate todate
1 40000 1994-06-26 1995-06-26
1 41000 1995-06-26 1996-06-25
1 42000 1996-06-25 1996-06-25
2 39000 1998-08-03 1999-08-03
.
.
结果应该是最高月薪和最低月薪差异最大的月份。
我确定我当前的尝试是错误的:
SELECT MAX(`salary`) - MIN(`salary`) AS diff,
YEAR(`from_date`), MONTH(`from_date`) FROM `salaries`
GROUP BY YEAR(`from_date`), MONTH(`from_date`)
ORDER BY diff DESC
但我卡住了,因为我只得到了时间间隔。有人对如何解决这个问题有什么建议吗?
最佳答案
创建一个只有两列的辅助表 salary_month
:salary
和 s_month
。对于原始 salary
表中的每条记录,在 salary_month
中插入 12 条记录,每个月一条,范围 [fromdate, todate)
。插入示例程序:
DELIMITER $$
create procedure get_month_salaries()
MODIFIES SQL DATA
begin
declare _df datetime;
declare _salary integer;
declare _counter integer;
declare done boolean default false;
declare cur cursor for select salary, fromdate from salaries;
declare continue HANDLER for not found set done := true;
open cur;
test_loop: loop
fetch cur into _salary, _df;
if done then
LEAVE test_loop;
end if;
set _counter = 0;
while _counter < 12 do
insert into salary_month values (_salary, DATE_ADD(_df, INTERVAL _counter MONTH));
set _counter = _counter + 1;
end while;
end loop test_loop;
close cur;
end$$
DELIMITER ;
然后运行您当前的查询
SELECT MAX(`salary`) - MIN(`salary`) AS diff,
YEAR(`s_month`), MONTH(`s_month`) FROM `salary_month`
GROUP BY YEAR(`s_month`), MONTH(`s_month`)
ORDER BY diff DESC
salary_month
表,你会得到预期的结果。
关于mysql - 年薪月薪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46551919/
同样是程序员,为什么年薪的差距那么大呢?有的程序员非常诚恳,认为薪水没达到预期,是因为自己的技术水平不够。但事实上,技术能力并不是决定薪酬的唯一因素,供需关系对薪酬的影响非常大。 很多时候,两个能力差
我是一名优秀的程序员,十分优秀!