gpt4 book ai didi

sql - 根据聚合值选择单个记录

转载 作者:行者123 更新时间:2023-12-03 23:33:24 34 4
gpt4 key购买 nike

假设我有下表

EmployeeID            Salary                      Date
----------- ---------------- -----------
37 45000.00 2015-03-11
102 36500.00 2015-03-11
103 43000.00 2015-03-11
104 45000.00 2015-03-11
105 40000.00 2015-03-11
37 45000.00 2015-04-11
102 36500.00 2015-04-11
103 43000.00 2015-04-11
104 45000.00 2015-04-11
105 40000.00 2015-04-11

我想检索“Sum Of Salary”超过80000的记录,所以需要的输出是

EmployeeID            Salary                      Date
----------- ---------------- -----------
37 45000.00 2015-03-11
103 43000.00 2015-03-11
104 45000.00 2015-03-11
37 45000.00 2015-04-11
103 43000.00 2015-04-11
104 45000.00 2015-04-11

我是通过以下方式实现的:

  1. 将聚合结果存储到表变量中。
  2. 原始表和表变量之间的内部连接

    DECLARE @tmpAggregatedSalaries TABLE
    (
    EmployeeID INT,
    SumOfSalary DECIMAL(18, 2)
    )

    INSERT INTO @tmpAggregatedSalaries
    SELECT sal.EmployeeID
    , SUM(sal.Salary) AS SumOfSalary
    FROM Salaries sal
    GROUP BY sal.EmployeeID

    SELECT sal.*
    FROM Salaries sal
    INNER JOIN @tmpAggregatedSalaries aggrSal ON sal.EmployeeID = aggrSal.EmployeeID
    AND aggrSal.SumOfSalary > 80000

据我所知,存储临时结果以进行处理优于内联查询,因此我选择了“表变量”。请给我建议更优化的版本。

最佳答案

一种选择是使用 GROUP BY 子查询来识别薪水总和大于 80000 的所有员工,以从您的表中过滤掉您不想看到的记录。

SELECT t1.EmployeeID,
t1.Salary,
t1.Date
FROM Salaries t1
INNER JOIN
(
SELECT EmployeeID
FROM Salaries
GROUP BY EmployeeID
HAVING SUM(Salary) > 80000
) t2
ON t1.EmployeeID = t2.EmployeeID

关于sql - 根据聚合值选择单个记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39064145/

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