如何计算SQL中的平均唯一行?

时间:2019-04-11 21:15:02

标签: sql

我创建了一个表,其中包含“国家/地区”和“客户ID”列,所有行都描述了订单:

SELECT CustomerID, CountryRegionCode
FROM Sales.SalesOrderHeader, Sales.SalesTerritory
WHERE Sales.SalesOrderHeader.TerritoryID = Sales.SalesTerritory.TerritoryID:

enter image description here

我需要计算所有国家(地区)以及美国国家/地区在同一输出表中每个客户的平均订单金额。

平均值是:(世界上的客户数量)/(世界上的订单数量)

(美国客户数量)/(美国订单数量)

输出:

 CountryRegionCode   | Average orders per customer
      World          |        ?
       US            |        ?

1 个答案:

答案 0 :(得分:1)

如果世界包括美国,那么您几乎需要两个查询:

SELECT 'World', COUNT(*) * 1.0 / COUNT(DISTINCT CustomerID)
FROM s.SalesOrderHeader soh JOIN
     s.SalesTerritory st
     ON soh.TerritoryID = st.TerritoryID
UNION ALL
SELECT 'US', COUNT(*) * 1.0 / COUNT(DISTINCT CustomerID)
FROM s.SalesOrderHeader soh JOIN
     s.SalesTerritory st
     ON soh.TerritoryID = st.TerritoryID
WHERE st.CountryRegionCode = 'US';

注意:

  • 这引入了正确的,明确的,标准 JOIN语法。
  • 这具有表别名,因此查询更易于编写和阅读。
  • * 1.0是因为某些数据库进行整数除法,因此产生的数字带有小数位。