如何在单个查询中计算多个总和和平均值?

时间:2019-03-09 21:14:06

标签: sql sql-server sum average

我正在上SQL课堂,正在为一个问题而苦苦挣扎。我们正在SQL Server中使用AdventureWorksDW2014数据库,这就是我遇到的问题:

编写一个查询,该查询将返回向代理商销售的每位员工的员工密钥,名字,中间名,姓氏,总销售额和每笔销售的平均金额。所有货币值都应四舍五入到小数点后两位。名称应作为“ Last,First Middle”作为单个记录出现。将结果按总销售额(最高)排序,然后按平均每笔销售额(最高)排序,然后按员工姓名排序。

我没有问题选择EmployeeKey,也没有使用concat并按照说明设置名称的格式。浏览完数据后,很显然,员工信息将需要来自DimEmployee表,而销售数据将需要来自FactResellerSales表,并且我能够毫无问题地完成表之间的内部联接。我也知道如何使用sum和avg函数分别计算员工的总数和平均值,但是这些一次只能计算一名员工,并且只返回一个结果。我一直挂着的部分是为每位员工的计算得出的总和和平均值创建列。我需要得出的结果需要有一个列显示每个员工的总销售额,并在一个列中显示每个员工的平均每笔销售额以及每个员工要求的其他信息。到目前为止,我已经跑了

select distinct EmployeeKey  
from FactResellerSales  

确定与销售相关的员工密钥,并显示有17个。我试图使用from语句中每个员工的子查询构造查询。

(select EmployeeKey, sum (SalesAmount) as TotalSalesByEmp, avg (SalesAmount) 
as AvgPerSaleByEmp  
from FactResellerSales  
where EmployeeKey = 272) 

认为,即使执行17个子查询会很耗时,我最终还是可以从中将请求的数据绘制到主查询中,但是却收到错误消息“ Msg 8120,级别16,状态1,行359 在选择列表中,'FactResellerSales.EmployeeKey'列无效,因为当我尝试测试子查询时,它既不包含在聚合函数中也不包含在GROUP BY子句中。但是我不能遗漏EmployeeKey到目前为止,我的查询(包括我将在order by语句中酌情用于其他字段的别名)是:

USE AdventureWorksDW2014  
select e.EmployeeKey,  
    concat (e.LastName, ', ' + e.FirstName, ' ' + e.MiddleName) as EmployeeName  
from FactResellerSales as s  
inner join DimEmployee as e  
on s.EmployeeKey = e.EmployeeKey  
order by TotalSalesByEmp desc, AvgPerSaleByEmp desc, EmployeeName 

我只需要弄清楚如何添加其他两个字段即可。

我已经描述了我需要的结果应该是什么样子,但是由于这对某些人来说显然不够好,因此我将尝试举一个例子。抱歉,如果格式在转换中很奇怪(我保证在输入时看起来正确)。

| EmployeeKey | EmployeeName      | TotalSalesByEmp | AvgPerSaleByEmp |  
| 282         | Mitchell, Linda C | 10367007.43     | 1458.70         |  
| 283         | Carson, Jillian   | 10065803.54     | 1286.36         |  
| 281         | Blythe, Michael G | 9293903.01      | 1314.74         |  
| 272         | Jiang, Stephen Y  | 1092123.86      | 1378.94         | 

请帮助。

1 个答案:

答案 0 :(得分:1)

只需对员工详细信息使用attention : deepin-screenshot-4.0.10.4-4.fc29.x86_64.rpm: Entête V3 RSA/SHA256 Signature, clé ID 429476b4: NOKEY erreur : Dépendances requises: libQt5Core.so.5(Qt_5.11)(64bit) est nécessaire pour deepin-screenshot-4.0.10.4-4.fc29.x86_64 libdtkcore.so.2()(64bit) est nécessaire pour deepin-screenshot-4.0.10.4-4.fc29.x86_64 libdtkwidget.so.2()(64bit) est nécessaire pour deepin-screenshot-4.0.10.4-4.fc29.x86_64 libdtkwm.so.2()(64bit) est nécessaire pour deepin-screenshot-4.0.10.4-4.fc29.x86_64 进行汇总,即可计算出所有17名员工的总经销商销售量和平均经销商销售量:

GROUP BY
相关问题