查询以识别公司高于平均销售额
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