我们有一个数据集,随机样本如下所示;
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
在这里,我们确信 salesman_id
以及 day
是独一无二的。例如, salesman_id =1
以及 day=2017-01-17
不能出现两次或多次。
现在的问题是,对于每个城市,找出平均销售量。我的第一次尝试是;
SELECT city,
AVG(sale_qty)
FROM table
GROUP BY city
第一种方法给出的答案是:;
City|avg_sales
Chicago| 22.33
NewYork| 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| 33.5
NewYork| 7.5
我能看出答案的不同。而我真的很想明白,造成这种差异的根本原因是什么,其次,在使用时应该仔细考虑哪些因素 Group By
条款。这将帮助我避免使用 Group By
在将来盲目的条款。提前谢谢。
2条答案
按热度按时间uajslkp61#
第一种方法计算数据中每个城市的平均销售额。一个普通销售人员平均一天的平均销售额是多少?
第二种方法计算城市中每个销售人员的平均销售额。一个销售员一整天在这个城市的平均销售额是多少?
这些是完全不同的。没有理由指望他们会在一起。
j8ag8udp2#
在第一个构建中,您计算每个城市的平均销售金额,而不考虑销售人员。在第二种情况下,计算每个城市每个销售人员的总和,然后取每个城市的平均值。
试想一下,销售员a每人赚99美元,销售员b每人赚1美元。在你的第一个建筑中,平均值是1美元。在你的第二个例子中,销售员a总共99美元,销售员b总共1美元,平均49.50美元。
问题与sql无关,特别是group-by;这就是你计算的逻辑。