确定公司高于平均销售额的查询
Query to Identify Above Average Sales for Company
我正在尝试查找销售额高于特定公司平均销售额的员工。我正在使用 Microsoft SQL 服务器,这是我目前拥有的:
SELECT *
FROM
(
SELECT
Name,
SalesTotal as Sales,
AVG(SalesTotal) as MeanSales
FROM
Employees
GROUP BY
Name
SalesTotal
) nested
WHERE Sales > MeanSales
但是,我的查询returns什么也没有。这是写这样的东西的正确方法吗?我可以做些什么来简化事情?
如果 table 中每个员工有 1 行,则在 WHERE
子句中使用子查询,其中 returns 平均值:
SELECT Name, SalesTotal AS Sales
FROM Employees
WHERE SalesTotal > (SELECT AVG(SalesTotal) FROM Employees)
单个标量值的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;
我正在尝试查找销售额高于特定公司平均销售额的员工。我正在使用 Microsoft SQL 服务器,这是我目前拥有的:
SELECT *
FROM
(
SELECT
Name,
SalesTotal as Sales,
AVG(SalesTotal) as MeanSales
FROM
Employees
GROUP BY
Name
SalesTotal
) nested
WHERE Sales > MeanSales
但是,我的查询returns什么也没有。这是写这样的东西的正确方法吗?我可以做些什么来简化事情?
如果 table 中每个员工有 1 行,则在 WHERE
子句中使用子查询,其中 returns 平均值:
SELECT Name, SalesTotal AS Sales
FROM Employees
WHERE SalesTotal > (SELECT AVG(SalesTotal) FROM Employees)
单个标量值的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;