在SQL中的分层列上使用GROUPBY

在SQL中的分层列上使用GROUPBY,sql,group-by,Sql,Group By,我们有一个数据集,随机样本如下所示 city|salesman_id|day|sale_qty Chicago| 1 | 2017-01-16 | 24 Chicago| 1 | 2017-01-17 | 23 Chicago| 2 | 2017-01-16 | 20 NewYork| 1 | 2017-01-15 | 0 NewYork| 2 | 2017-01-15 | 10 NewYork| 1 | 2017-01-16 | 5 在这里,我们确信销售人员id和日期的给定组合

我们有一个数据集,随机样本如下所示

city|salesman_id|day|sale_qty

Chicago| 1  | 2017-01-16 | 24
Chicago| 1  | 2017-01-17 | 23
Chicago| 2  | 2017-01-16 | 20
NewYork| 1  | 2017-01-15 | 0
NewYork| 2  | 2017-01-15 | 10
NewYork| 1  | 2017-01-16 | 5
在这里,我们确信销售人员id和日期的给定组合是唯一的。例如,saller_id=1和day=2017-01-17不能出现两次或两次以上

现在的问题是,找到每个城市的平均销售量。我的第一次尝试是

SELECT city,
       AVG(sale_qty)
FROM table
GROUP BY city
第一种方法给出的答案是:

  City|avg_sales

 Chicago| 22.33
 NewYork| 5
city| avg_sales

Chicago| 33.5
NewYork| 7.5
作为一种直觉,我尝试了另一种方法

WITH CTE1(

SELECT city,
        salesman_id,
        SUM(sale_qty) AS total
FROM table
GROUP BY city, salesman_id)

SELECT city,
      AVG(total)
FROM CTE1
GROUP BY city
答案如下:

  City|avg_sales

 Chicago| 22.33
 NewYork| 5
city| avg_sales

Chicago| 33.5
NewYork| 7.5

我能看出答案的不同。我真的想了解,造成这种差异的根本原因是什么,其次,在使用GROUPBY子句时应该仔细考虑哪些因素。这将帮助我避免在将来盲目使用GROUPBY子句。提前感谢。

在您的第一次构建中,您将计算每个城市的平均销售额,而不考虑销售人员。在第二种情况下,您计算每个城市每个销售人员的总和,然后取每个城市的平均值

想象一下,销售员A每人销售99美元,销售员B每人销售1美元。在第一次施工中,平均费用为1美元。在你的第二个例子中,销售员A总共99美元,销售员B总共1美元,平均49.50美元


这个问题与SQL无关,尤其是Group By;这就是你计算的逻辑。

第一个计算数据中每个城市的平均销售额。对于一个普通的销售人员来说,这个城市平均每天的平均销售额是多少

第二种方法计算城市内每个销售人员的平均销售额。一个销售人员在这座城市的平均销售额是多少


这些是完全不同的。没有理由期望它们甚至接近。

再计算一下,可以称之为一个城市的平均销售额吗?这就是我被绊倒的地方。