2017-03-17 359 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

我明白了。謝謝 –