题目描述
(通过次数15,259 | 提交次数24,050,通过率63.45%)
Customer表: +-------------+---------+ | Column Name | Type | +-------------+---------+ | customer_id | int | | product_key | int | +-------------+---------+ product_key 是 Customer 表的外键。 Product表: +-------------+---------+ | Column Name | Type | +-------------+---------+ | product_key | int | +-------------+---------+ product_key 是这张表的主键。 写一条 SQL 查询语句,从 Customer 表中查询购买了 Product 表中所有产品的客户的 id。 示例: Customer 表: +-------------+-------------+ | customer_id | product_key | +-------------+-------------+ | 1 | 5 | | 2 | 6 | | 3 | 5 | | 3 | 6 | | 1 | 6 | +-------------+-------------+ Product 表: +-------------+ | product_key | +-------------+ | 5 | | 6 | +-------------+ Result 表: +-------------+ | customer_id | +-------------+ | 1 | | 3 | +-------------+ 购买了所有产品(5 和 6)的客户的 id 是 1 和 3 。 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/customers-who-bought-all-products
//测试数据 #测试数据 Create table If Not Exists Customer (customer_id int, product_key int); Create table If Not Exists Product (product_key int); insert into Customer (customer_id, product_key) values ('1', '5'); insert into Customer (customer_id, product_key) values ('2', '6'); insert into Customer (customer_id, product_key) values ('3', '5'); insert into Customer (customer_id, product_key) values ('3', '6'); insert into Customer (customer_id, product_key) values ('1', '6'); insert into Product (product_key) values ('5'); insert into Product (product_key) values ('6');
解题思路
Customer表保存了所有客户的购买记录。一个客户可以购买多个产品,也可以同一产品购买多次。
Product表保存了所有的产品信息。
题目要求,计算出购买了所有产品的客户。
首先,需要知道每个客户购买的产品数。可以从Customer表中分组汇总得出。因为同一个客户可以购买同一个产品多次,因为在计数时,需要先对product_key去重。
然后,需要知道总的产品数。直接对Product表做全表的COUNT即可。
最后,将每个客户购买的产品数与总的产品数相比较。相等的即为购买了所有产品的客户。
参考SQL
未特别说明的情况下,参考SQL为基于MySQL8.0实现。
select customer_id from Customer group by customer_id having count(distinct product_key) = (select count(1) from Product);
本站所有内容均为原创,本站保留所有权利。仅允许非商业用途的转载,但必须注明来源网站、作者、来源链接!否则,由此造成的一切后果,由转载方承担!
干货分享、技术提升、面试笔试、学习交流,欢迎关注公众号:xuesql。QQ学习交流群:209942678。