平均重复SQL
我目前在为不同的日期范围创建两个AVG列时遇到问题 我尝试了下面的代码来解决这个问题平均重复SQL,sql,Sql,我目前在为不同的日期范围创建两个AVG列时遇到问题 我尝试了下面的代码来解决这个问题 WITH Tbl AS( SELECT FORMAT(SaleDate,'MM')+'.'+FORMAT(SaleDate,'yyyy') AS SALE_MY, Employee, NewScheme FROM Salereport WHERE Business Area='Sales' ) SELECT AgentName, (SELECT AVG(NewScheme) FROM Tbl WHE
WITH Tbl AS(
SELECT FORMAT(SaleDate,'MM')+'.'+FORMAT(SaleDate,'yyyy') AS SALE_MY, Employee, NewScheme
FROM Salereport
WHERE Business Area='Sales'
)
SELECT
AgentName,
(SELECT AVG(NewScheme) FROM Tbl WHERE SALE_MY='01.2019' OR SALE_MY='02.2019' OR SALE_MY='03.2019'),
(SELECT AVG(NewScheme) FROM Tbl WHERE SALE_MY='04.2019' OR SALE_MY='05.2019' OR SALE_MY='06.2019')
FROM Tbl
GROUP BY Employee
结果是每个人的平均值相同。使用条件聚合:
SELECT Employee,
AVG(CASE WHEN SaleDate >= '2019-01-01' AND SaleDate < '2019-04-01'
THEN NewScheme
END),
AVG(CASE WHEN SaleDate >= '2019-01-04' AND SaleDate < '2019-04-07'
THEN NewScheme
END),
FROM Salereport
WHERE Business Area = 'Sales'
GROUP BY Employee;
选择员工,
平均值(SaleDate>='2019-01-01'和SaleDate<'2019-04-01'时的情况)
然后是新闻模式
(完),,
平均值(SaleDate>='2019-01-04'和SaleDate<'2019-04-07'时的情况)
然后是新闻模式
(完),,
来自销售报告
其中业务领域=‘销售’
按员工分组;
处理日期时,应使用日期操作。通常需要转换为字符串的唯一时间是格式化结果集中的日期
顺便说一句,您的版本是所有员工的平均值。不需要子查询,但如果要使用子查询,则需要相关子查询。请尝试以下操作:
WITH Tbl AS(
SELECT FORMAT(SaleDate,'MM')+'.'+FORMAT(SaleDate,'yyyy') AS SALE_MY, Employee, NewScheme
FROM Salereport
WHERE Business Area='Sales'
)
SELECT Employee,
AVG(CASE WHEN SALE_MY IN ('01.2019', '02.2019', '03.2019') THEN NewScheme ELSE NULL END) AS Q1_Avg,
AVG(CASE WHEN SALE_MY IN ('04.2019', '05.2019', '06.2019') THEN NewScheme ELSE NULL END) AS Q2_Avg
FROM Tbl
GROUP BY Employee
请用您正在使用的数据库标记:@Gordon是正确的,您不需要将日期转换为字符串。他的回答会有更好的表现,谢谢你。我在自己的思路中迷失了方向-这将对我的未来有很大帮助。我们将如何在何时将不包含NULL引入到这个案例中?@Wyseguy。我不明白你的评论
NULL
值不影响平均值。