MYSQL查询有更多客户的城市

时间:2020-09-29 15:06:34

标签: mysql

我必须编写一个查询,该查询将返回所有客户超过所有城市平均客户数量的所有城市。对于每个这样的城市,返回国家名称,城市名称和客户数量。 按国家/地区名称升序排列结果。

输出应为

国家名,城市名,计数

我尝试使用子查询,但出现错误

Select country_name, city_name, count(customer_name)
from country
inner join city on city.country_id = country.id
inner join customer on customer.city_id = city.id
where customer_name > (select avg(customer_name) 
                       from customer 
                       inner join customer on customer.city_id = city.id group by id)
                       group by 1, 2

然后我尝试

Select country.country_name, city.city_name, count(customer.customer_name)
from country
inner join city on city.country_id = country.id
inner join customer on customer.city_id = city.id
group by country.country_name, city.city_name
having count(customer.customer_name) > 
(
  Select count(customer.customer_name) / count(city.city_name) as avg_per_city
  from city
  inner join customer on customer.city_id = city.id
) 

但这也给出了错误。

您的帮助会很棒。

1 个答案:

答案 0 :(得分:0)

第二个查询看起来几乎正确。由于城市ID是唯一的,因此您在计算平均值时无需加入城市表。

尝试一下:

Select country.country_name, city.city_name, count(customer.customer_name)
from country
inner join city on city.country_id = country.id
inner join customer on customer.city_id = city.id
group by country.country_name, city.city_name
having count(customer.customer_name) > 
(
  Select count(customer.customer_name) / count(distinct city_id) as avg_per_city
  from customer
)