查询以识别公司高于平均销售额

Posted

技术标签:

【中文标题】查询以识别公司高于平均销售额【英文标题】:Query to Identify Above Average Sales for Company 【发布时间】:2021-06-28 11:40:48 【问题描述】:

我试图找出销售额高于特定公司平均销售额的员工。我正在使用 Microsoft SQL Server,这是我目前所拥有的:

SELECT *
FROM
    (
    SELECT
        Name,
        SalesTotal as Sales,
        AVG(SalesTotal) as MeanSales
    FROM
        Employees
    GROUP BY
        Name
        SalesTotal
    ) nested
WHERE Sales > MeanSales

但是,我的查询没有返回任何内容。这是写这样的东西的正确方法吗?我可以做些什么来简化事情?

【问题讨论】:

您能否尝试将平均值 (MeanSales) 放入变量中并在运行实际查询之前对其进行查询? 问题不清楚。您是否希望任何公司中的任何人都大于特定公司的平均水平?您只想考虑一家特定公司的员工吗?你只想让员工反对他们自己的公司吗? 这能回答你的问题吗? How to determine salaries greater than the average salary 【参考方案1】:

如果表中的每个员工都有 1 行,则在 WHERE 子句中使用返回平均值的子查询:

SELECT Name, SalesTotal AS Sales
FROM Employees        
WHERE SalesTotal > (SELECT AVG(SalesTotal) FROM Employees)

【讨论】:

子查询的效率可能会低于窗口聚合 @Charlieface 优化器只执行一次的子查询是比窗口函数更好的选择。【参考方案2】:

单个标量值的AVG 将是单个标量值,并且标量值不能大于自身。你想要一个窗口聚合:

--I prefer CTEs
WITH CTE AS(
    SELECT [Name],
           SalesTotal,
           AVG(SalesTotal) OVER () AS AvgTotal
    FROM dbo.Employees)
SELECT [Name],
       SalesTotal
FROM CTE
WHERE SalesTotal > AvgTotal;

【讨论】:

以上是关于查询以识别公司高于平均销售额的主要内容,如果未能解决你的问题,请参考以下文章

pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动平均值(rolling mean)例如,计算某公司的多个店铺每N天(5天)的滚动销售额平均值

找出有多少高于标准开发

2023-01-15:销售员。编写一个SQL查询,报告没有任何与名为 “RED” 的公司相关的订单的所有销售人员的姓名。以 任意顺序 返回结果表。 DROP TABLE IF EXISTS `com

2023-01-15:销售员。编写一个SQL查询,报告没有任何与名为 “RED” 的公司相关的订单的所有销售人员的姓名。以 任意顺序 返回结果表。 DROP TABLE IF EXISTS `com

用SQL查询语句 1,计算每个书店书籍的平均单价 2,计算各个地区书籍销售总量 下面分别是销售表,书店表

每天获取产品销售额的平均值并计算销售额为正的天数