我运行以下查询:
SELECT Date,
Branch,
Total,
(SELECT CAST(AVG(Total) AS INT)
FROM MaySales
GROUP BY Branch) AS AvgSales
FROM MaySales
我想要的结果是在每日销售额旁边显示每月平均销售额,以便我可以执行case语句。
date | branchcase statement | 05 05 | 5000 | 下面avg |
---|---|---|---|
05、06 | 5000 | avg | |
05 05 td> | 4500 | 以上avg |
当前查询尝试为单个列返回多行,而其他列则自然地每行返回一次。所以它执行失败。也许使用相关子查询是一种解决方案,但不是理想的解决方案。更喜欢使用窗口函数,如:
SELECT Date, Branch, Total,
AVG(Total) OVER (PARTITION BY Branch) AS AvgSales
FROM MaySales
我不能在原始问题中发表评论,但看起来您选择了MaySales表中的所有行,我假设这是5月份的。在子查询中,如果您的目的是按月分组,则没有月操作符。
SELECT year(date) as BranchYear, month(date) as BranchMonth, branch, CAST(avg(TOTAL) AS int)
FROM MaySales
GROUP BY year(date), month(date), Branch
试试上面的方法,把你的数据细化到一个月的粒度。一旦你理解了这一点,你就能更好地格式化你的数据,假设你想显示正常的每日总数和每月总数。
进一步说,我将不再使用"MaySales"表,因为这意味着您将拥有一个针对一年中的每个月的表。如果数据延长数年,那么会发生什么?有一个包含DATE、branch、TOTAL列的"BranchSales"表,我假设这些列是每天的总数,然后你就可以计算你希望大于一天的任何时间段的平均总数,包括周、月、季度和年总数