【问题标题】:T-sql using AVG in Group By with conditional/where resultT-sql 在 Group By 中使用 AVG 并带有条件/where 结果
【发布时间】:2017-02-13 13:50:20
【问题描述】:

T-SQL 查询:

  SELECT

    RESULT.Year AS 'Year',
    RESULT.Month AS 'Month',
    RESULT.EmployeeNumber,
    RESULT.StartedWorking,
    RESULT.SeperatedWorking,
    (AVG(RESULT.SeperatedWorking / RESULT.EmployeeNumber * 100)) AS ConversionRate

    FROM (

                    SELECT  
                        YEAR(CreatedAt) AS 'Year', 
                        12 AS 'Month',
                        COUNT(*) AS 'EmployeeNumber',
                        COUNT(EmploymentStartDate) AS 'StartedWorking',
                        COUNT(EmploymentEndDate) AS 'SeperatedWorking'

                    FROM Employees 

                    WHERE IsDeleted = 0

                    GROUP BY 
                    YEAR(CreatedAt)

    ) AS RESULT

问题:

我正在尝试将以下公式用于 ConversionRate 列

COUNT(EmploymentEndDate) / COUNT(EmploymentStartDate) * 100

我正在选择下面的查询以获得如下结果

(AVG(RESULT.SeperatedWorking / RESULT.EmployeeNumber * 100)) AS ConversionRate

此查询显示在错误 AS 下方

"Column 'RESULT.Year' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
"

如何通过对“ConversionRate”列使用 AVG 来获得正确的结果?

【问题讨论】:

    标签: sql-server average


    【解决方案1】:

    您还必须在外部查询中添加group by。喜欢:

    SELECT
    
        RESULT.Year AS 'Year',
        RESULT.Month AS 'Month',
        RESULT.EmployeeNumber,
        RESULT.StartedWorking,
        RESULT.SeperatedWorking,
        (AVG(RESULT.SeperatedWorking / RESULT.EmployeeNumber * 100)) AS ConversionRate
    
        FROM (
    
                        SELECT  
                            YEAR(CreatedAt) AS 'Year', 
                            12 AS 'Month',
                            COUNT(*) AS 'EmployeeNumber',
                            COUNT(EmploymentStartDate) AS 'StartedWorking',
                            COUNT(EmploymentEndDate) AS 'SeperatedWorking'
    
                        FROM Employees 
    
                        WHERE IsDeleted = 0
    
                        GROUP BY 
                        YEAR(CreatedAt)
    
        ) AS RESULT
    
        GROUP BY
            RESULT.Year,
            RESULT.Month ,
            RESULT.EmployeeNumber,
            RESULT.StartedWorking,
            RESULT.SeperatedWorking
    

    【讨论】:

      【解决方案2】:

      当您在选择列表中使用聚合函数时,您必须在外部查询中使用 GROUP BY。

      【讨论】:

        猜你喜欢
        • 2013-01-27
        • 2021-06-06
        • 2011-10-12
        • 1970-01-01
        • 2019-02-06
        • 2012-09-18
        • 2013-03-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多