【问题标题】:How use select * with group by subquery in sql server如何在 sql server 中使用 select * 和 group by 子查询
【发布时间】:2021-09-28 16:02:45
【问题描述】:

我有带有列的员工工资详细记录表

Id  Name        Year    Month   Salary
1   ABC         2021    Jan     50000
2   PQR         2021    Jan     40000
3   KLM         2021    Feb     45000
4   LMN         2021    Jan     55000
5   LMN         2022    Jan     20000
6   ABC         2022    Feb     25000
7   ABC         2022    Jan     2500
8   ABC         2022    Dec     60000
9   LMN         2022    Nov     70000

现在我想找出哪个员工加入后薪水大于100000,并显示员工所有数据

--查找到现在哪个员工的工资超过100000

select  name,sum(salary) as AnnualSalary from tblEmpsalary
group by Name
having sum(Salary)>100000 --this query works

--但下面的查询显示没有数据,(我想显示总工资超过100000的员工的所有数据)

SELECT id, name,Month,Year, SUM(Salary) AS TotalSales
FROM tblEmpsalary
GROUP BY name,Id,Month,Year,Salary
having SUM(Salary)>100000;

【问题讨论】:

  • 似乎应该在您的SELECTGROUP BY 中的唯一列(SUM 除外)是name。对于初学者,您在 ID 上进行分组,但您所有的 IDs 都是不同的值,因此您聚合了 1 个值;而单个值的SUM,就是单个值。

标签: sql sql-server group-by sql-server-2014 sql-server-2014-express


【解决方案1】:
 SELECT T.ID,T.Name,T.Year,T.Month,T.Salary
 FROM tblEmpsalary AS T
 JOIN
 (
   select  ID
   from tblEmpsalary
   group by ID
   having sum(Salary)>100000
 )AS X ON T.ID=X.ID

【讨论】:

    【解决方案2】:

    您可以为此使用窗口函数

    SELECT
      id,
      name,
      Month,
      Year,
      TotalSales
    FROM (
        SELECT *,
            SUM(Salary) OVER (PARTITION BY name) AS TotalSales
        FROM tblEmpsalary e
    ) e
    WHERE e.TotalSales > 100000;
    

    【讨论】:

      【解决方案3】:

      请尝试以下查询,其中一个查询用于分组,另一个查询加入以获取员工详细信息:

      SELECT TS.id, TS.name, TS.Month,Year, TS.Salary, ATS.TotalSales FROM 
       (SELECT Month, Year, SUM(Salary) AS TotalSales 
       FROM tblEmpsalary 
       GROUP BY Month,Year,Salary
       HAVING SUM(Salary)>100000
       ) AS ATS
       LEFT OUTER JOIN tblEmpsalary TS on ATS.Month = TS.Month and ATS.Year = TS.Year
       ORDER BY TS.name, TS.Id, TS.Month, TS.Year, ATS.TotalSales
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-31
        • 2023-04-02
        • 2013-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        相关资源
        最近更新 更多