Mysql 为每个客户X写一个查询,另一个客户Y至少与X共租了一部电影
使用sakila数据库,编写一个查询,为每个客户X查找另一个客户Y,该客户Y至少租用了一部与X相同的电影。查找所有此类客户对X、Y,并针对每对客户查找重叠电影的数量。按重叠电影的数量排序结果 我尝试过使用别名、内部联接和子查询。但是,我相信我的代码有语法错误 选择o1.customer\u id作为CustomerID1, o2.客户id作为客户2, 计数*无需翻拍电影 从中选择c.客户id、f.胶片id 从客户身份c, 以r的身份加入租赁公司 在r.customer\u id=c.customer\u id上 以i.inventory\u id=r.inventory\u id上的i加入库存 在i.film\u id=f.film\u id上以f的身份加入film AS o1 加入选择c.customer\u id、f.film\u id 从客户身份c, 以r的身份加入租赁公司 在r.customer\u id=c.customer\u id上 以i.inventory\u id=r.inventory\u id上的i加入库存 在i.film\u id=f.film\u id上以f的身份加入film 作为o2 在o2.film_id=o1.film_id和o2.customer_idMysql 为每个客户X写一个查询,另一个客户Y至少与X共租了一部电影,mysql,sql,Mysql,Sql,使用sakila数据库,编写一个查询,为每个客户X查找另一个客户Y,该客户Y至少租用了一部与X相同的电影。查找所有此类客户对X、Y,并针对每对客户查找重叠电影的数量。按重叠电影的数量排序结果 我尝试过使用别名、内部联接和子查询。但是,我相信我的代码有语法错误 选择o1.customer\u id作为CustomerID1, o2.客户id作为客户2, 计数*无需翻拍电影 从中选择c.客户id、f.胶片id 从客户身份c, 以r的身份加入租赁公司 在r.customer\u id=c.custom
SELECT o1.customer_id AS CustomerID1,
o2.customer_id AS CustomerID2,
COUNT(*) NoOfOverlappingMovies
FROM( (SELECT c.customer_id, f.film_id
FROM customer AS c
JOIN rental AS r ON r.customer_id = c.customer_id
JOIN inventory AS i ON i.inventory_id = r.inventory_id
JOIN film AS f ON i.film_id = f.film_id
) AS o1
JOIN (SELECT c.customer_id, f.film_id
FROM customer AS c
JOIN rental AS r ON r.customer_id = c.customer_id
JOIN inventory AS i ON i.inventory_id = r.inventory_id
JOIN film AS f ON i.film_id = f.film_id
) AS o2 ON o2.film_id = o1.film_id AND o2.customer_id < o1.customer_id )
GROUP BY o1.customer_id, o2.customer_id
ORDER BY COUNT(*) DESC;
问题似乎是:
select r1.customer_id, r2.customer_id,
count(distinct r1.film_id) as num_films
from rental r1 join
rental r2
on r1.film_id = r2.film_id and
r1.customer_id < r2.customer_id
group by r1.customer_id, r2.customer_id
order by num_films desc;
这个查询似乎不需要其他表。那么是MySQL,而不是SQL Server?这段开头的内容就像是一个家庭作业问题。但是,按计数*DESC排序是无效的T-SQL。