【发布时间】:2019-10-24 09:05:56
【问题描述】:
使用 sakila 数据库,编写一个查询,为每个客户 X 查找另一位客户 Y,该客户至少与 X 共同租借了一部电影。查找所有此类客户对 (X, Y) 并针对每一对,重叠电影的数量。按重叠电影的数量对结果排序
我尝试过使用别名、内部连接和子查询。但是,我认为我的代码存在语法错误。
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;
查询应该有 3 列。 CustomerID1、CustomerID2 和 NoOfOverlappingMovies。
【问题讨论】:
-
那么是 MySQL,而不是 SQL Server?
-
开头段落写得很像家庭作业问题。但是,
ORDER BY COUNT(*) DESC不是有效的 T-SQL。