mysql - SQL如何使用group by计算每个客户的总行数?

标签 mysql 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的行数,以便我可以获得每个城市租借的电影总数,并进行分组?

最佳答案

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

关于mysql - SQL如何使用group by计算每个客户的总行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42848178/

相关文章:

MySQL 索引 char(1) 列

mysql - 如何比较表中的2个字段并制作状态字段

javascript - Sequelize 中的 FOR SHARE 和 FOR UPDATE 语句

sql - Oracle 存储过程中的临时表

MySQL Get products also bought with a product/Optimise IN 查询

sql - Group By 中的 AWS Athena ALIAS 未解决

mysql - 我想了解 Windows 智能引号如何变成 "’"

mysql - 从停靠站表定义路线

mysql - 如何选择行的第一个和最后一个值以及 5 分钟间隔

sql - 如何从 T-SQL 获取当前实例名称