2017-03-17 27 views
0

我正在努力解决一个问题:“哪个城市的客户观看的电影数量最多?(根据租用的电影数量)”。SQL如何统计每个客户的总行数?

我正在使用MySQL中的Seikila示例数据库。城市实体与租赁和客户实体没有关系,但是有一个地址实体包含对客户实体依赖于id的address_id。然后,地址实体具有城市实体也获得的称为city_id的属性。而customer_id属性链接了客户和租赁实体。

此外,我必须计算每个城市每个客户租用的电影总数。

我只是做连接的一部分(代码更新):

select rental_id,cust.customer_id,city.city_id,city.city from rental as r 
inner join customer as cust on r.customer_id=cust.customer_id inner join 
address as a on cust.address_id=a.address_id inner join city as city on 
city.city_id=a.city_id 

我意识到,我应该补充city_id表,所以我的问题是:

怎么算的数排一个独特的customer_id,这样我就可以得到电影租的总数在每个城市,并且用一组?

+1

使用'COUNT(*)'和'GROUP BY'。你甚至在问题标题中写下了这个问题。 – Barmar

+0

我知道这是使用count(),但我想单独计算每个customer_id,而不是客户总数 –

+0

这听起来像你只是想按城市计算租金,而不是客户数。 – Barmar

回答

0

使用COUNT(*)可获得电影租赁总数,并按城市分组。

SELECT city.city, COUNT(*) AS total_rentals 
FROM rental AS r 
INNER JOIN customer AS cust on r.customer_id = cust.customer_id 
INNER JOIN address AS a on cust.address_id = a.address_id 
INNER JOIN city ON city.city_id = a.city_id 
GROUP BY city.city_id 
ORDER BY total_rentals DESC 
LIMIT 1 

如果你也想知道客户在这个城市的数量,你可以添加COUNT(DISTINCT cust.customer_id)SELECT列表。

+0

我明白了。谢谢 –