我有一个相当直截了当的面试问题:返回所有客户数量超过所有城市平均客户数量的国家。 country
表格:
id country_name
1 Austria
2 Germany
3 United Kingdom
``` `city` 表格:
id city_name country_id
1 Wien 1
2 Berlin 2
3 Hamburg 2
4 London 3
``` customer
表格:
id customer_name city_id
1 cust1 1
2 cust2 4
3 cust3 3
4 cust4 1
5 cust5 2
6 cust6 1
7 cust7 4
8 cust8 2
下面是我的解决方案。我的答案很接近,但没有通过测试,因为我的国家比预期的产量还多。你知道为什么,或者你将如何处理这个问题吗?
SELECT
co.country_name, COUNT(customer_name)
FROM
country co
JOIN
city ci ON co.id = ci.country_id
JOIN
customer cu ON ci.id = cu.city_id
GROUP BY co.country_name
HAVING COUNT(customer_name) > (SELECT
AVG(temp.cnt)
FROM
(SELECT
ci.id, COUNT(customer_name) AS cnt
FROM
city ci
JOIN customer cu ON ci.id = cu.city_id
GROUP BY ci.id) temp)
ORDER BY co.country_name ASC;
此线程sql中的用户:高于组平均值的计数值正在使用 WHERE
而不是 HAVING
选择大于平均值的值。我想知道 HAVING
不适用于此类问题。
1条答案
按热度按时间20jt8wwn1#
您当前的查询是解决此问题的一种有效方法,但您的答案的接收者可能希望得到不同的解决方案。更现代的方法可能包括分析函数:
在上面的cte中,当我们计算出每个国家名称的计数时,我们还计算整个原始结果集的平均计数。然后,我们只需子查询并将每个计数与平均值进行比较。