【问题标题】:SQL how to count total rows for each customer with group by?SQL如何计算每个客户的总行数?
【发布时间】:2017-08-08 11:01:56
【问题描述】:

我遇到了一个问题,即“哪个城市的客户观看的电影数量最多?(基于租借的电影数量)”。

我正在使用 MySQL 中的 Seikila 示例数据库来执行此操作。城市实体与出租和客户实体没有关系,但是有一个地址实体包含 address_id ,它依赖于客户实体的 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的行数,以便我可以得到每个城市电影租借总数,并按分组?

【问题讨论】:

  • 使用COUNT(*)GROUP BY。你甚至在问题标题中写下了这一点。
  • 我知道它正在使用 count() 但我想分别计算每个 customer_id,而不是客户总数
  • 听起来您只需要按城市划分的租金数量,而不是客户数量。
  • 嗯...问题是“哪个城市(客户)观看的电影数量最多(基于电影数量)”所以是的...我有点误解了这个问题跨度>

标签: mysql sql


【解决方案1】:

使用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 列表中。

【讨论】:

  • 我明白了。谢谢
猜你喜欢
  • 2023-02-22
  • 1970-01-01
  • 2023-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-25
相关资源
最近更新 更多