gpt4 book ai didi

mysql - 如何在另一个表中使用表的两个不同行的值

转载 作者:行者123 更新时间:2023-11-29 01:27:55 25 4
gpt4 key购买 nike

我有一个具有以下结构和数据的 MySQL 表:

Increments

id emp_id starting_salary increment_rate increment_frequency
2 340 5000 250 1
3 340 5000 250 4

我需要别名,ab,它们将根据以下公式保存一些值:

starting_salary + (increment_rate * increment_frequency)

准确地说,我想要a = 5250(基于a = (5000 + (250 * 1)))和b = 6000(基于 b = (5000 + (250 * 4)))

现在我有另一个包含以下数据的表:

 PaySlips

id employee_id salary_month arrear
173824 340 '2015-06-01' 2350

我想将从表 Increments 中获得的 ab 与表 PaySlips 连接起来。我想按以下方式使用 ab:

((a * 8) / 30 + (b * 22) / 30)

我的别名是 basic_salary。所以 basic_salary 将保留上述计算得出的这个值:

basic_salary = ((a * 8) / 30 + (b * 22) / 30) 
= ((5250 * 8) / 30 + (6000 *22) / 30)
= (1400 + 4400)
= 5800

我不知道该怎么做。谁能帮帮我?

我得到的只是两个表中的公共(public)列 - emp_idemployee_id 我可以使用这些列连接两个表。我只是不知道如何存储上述值并在我的查询中组织计算。

示例查询:

SELECT x.id, x.employee_id, 
(*my calculation using a and b from table Increments*) AS basic_salary,
x.salary_month, x.arrear
FROM PaySlips x
JOIN Increments y
ON x.employee_id = y.emp_id

确定a:

SELECT 
(
starting_salary +
(increment_rate * increment_frequency)
) AS a
FROM Increments
WHERE id = 2

为了确定b:

SELECT 
(
starting_salary +
(increment_rate * increment_frequency)
) AS b
FROM Increments
WHERE id = 3

MySQL版本:5.2

最佳答案

我不是很清楚所有细节,例如,如果一名员工分三行,应该怎么办?无论如何,这里有一个草图开始:

select employee_id
, ((a * 8) / 30 + (b * 22) / 30) as basic_salary
from (
select x.employee_id
, min(starting_salary + (increment_rate * increment_frequency)) as a
, max(starting_salary + (increment_rate * increment_frequency)) as b
, x.salary_month, x.arrear
from payslips x
join increments y
on x.employee_id = y.emp_id
group by x.employee_id, x.salary_month, x.arrear
) as t

如果 id 2 和 3 是条件(我假设它们是示例),您可以使用如下 case 语句:

 select employee_id
, ((a * 8) / 30 + (b * 22) / 30) as basic_salary
from (
select x.employee_id
, max(starting_salary + (increment_rate * case when y.id = 2 then increment_frequency end )) as a
, max(starting_salary + (increment_rate * case when y.id = 3 then increment_frequency end)) as b
, x.salary_month
, x.arrear
from payslips x
join increments y
on x.employee_id = y.emp_id
group by x.employee_id, x.salary_month, x.arrear
) as t;

在这种情况下,使用什么聚合并不重要,它是为了摆脱包含 null 的行。

关于mysql - 如何在另一个表中使用表的两个不同行的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31780255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com