在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;这就是你计算的逻辑。第一个计算数据中每个城市的平均销售额。对于一个普通的销售人员来说,这个城市平均每天的平均销售额是多少 第二种方法计算城市内每个销售人员的平均销售额。一个销售人员在这座城市的平均销售额是多少
这些是完全不同的。没有理由期望它们甚至接近。再计算一下,可以称之为一个城市的平均销售额吗?这就是我被绊倒的地方。