首页 > 数据库 >力扣数据库1045. 买下所有产品的客户

力扣数据库1045. 买下所有产品的客户

时间:2024-10-12 19:47:57浏览次数:3  
标签:customer product 1045 数据库 Product 力扣 key +-------------+ id

一、数据

1045. 买下所有产品的客户 - 力扣(LeetCode)

Customer 表:

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| customer_id | int     |
| product_key | int     |
+-------------+---------+
该表可能包含重复的行。
customer_id 不为 NULL。
product_key 是 Product 表的外键(reference 列)。

Product 表:

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| product_key | int     |
+-------------+---------+
product_key 是这张表的主键(具有唯一值的列)。

编写解决方案,报告 Customer 表中购买了 Product 表中所有产品的客户的 id。

返回结果表 无顺序要求 。

返回结果格式如下所示。

示例 1:

输入:
Customer 表:
+-------------+-------------+
| customer_id | product_key |
+-------------+-------------+
| 1           | 5           |
| 2           | 6           |
| 3           | 5           |
| 3           | 6           |
| 1           | 6           |
+-------------+-------------+
Product 表:
+-------------+
| product_key |
+-------------+
| 5           |
| 6           |
+-------------+
输出:
+-------------+
| customer_id |
+-------------+
| 1           |
| 3           |
+-------------+
解释:
购买了所有产品(5 和 6)的客户的 id 是 1 和 3 。

二、分析

要计算购买了所有产品的用户id,我们从Product表中可以计算出一共有多少种产品,然后在Customer表按用户id进行分组,分别计算出每个用户购买的商品的数量,因为Product表可能有重复数据,所以用户可能购买了多次同样的商品,所以需要使用distinct关键字求出每个用户购买不同商品的数量,然后与Product表中的产品数量进行对比,进而求出答案。

三、代码

SELECT customer_id
FROM Customer
GROUP BY customer_id
HAVING COUNT(DISTINCT product_key) =  --按用户进行分组,求出每个用户购买不同产品的数量
       (SELECT COUNT(product_key)  -- 用子查询求出一共有多少种产品
        FROM product);

四、小结

本题难度不大,主要运用好子查询的用法;踩坑点为:在Customer表中可能有重复数据,即一个用户购买了多次相同的产品,所以需要用distinct语句进行去重,然后再计算出每个用户的购买数量。

标签:customer,product,1045,数据库,Product,力扣,key,+-------------+,id
From: https://blog.csdn.net/dhdbanwan/article/details/142885135

相关文章

  • 力扣数据库1193. 每月交易 I
    一、数据表:Transactions+---------------+---------+|ColumnName|Type|+---------------+---------+|id|int||country|varchar||state|enum||amount|int||trans_date|date|+-------......
  • 力扣数据库1174. 即时食物配送 II
    一、数据配送表: Delivery+-----------------------------+---------+|ColumnName|Type|+-----------------------------+---------+|delivery_id|int||customer_id|int||order_date......
  • 数据库三范式
    第一范式主要是确保数据表中每个字段的值必须具有原子性,也就是说数据表中每个字段的值为不可再拆分的最新数据单元。第二范式要求在满足第一范式的基础上,还要满足数据表里的每一条数据记录,都是可唯一标识的。而且所有非主键字段,都必须完全依赖主键,不能只依赖主键的一部分。如果知......
  • 【力扣150&Golang】分发糖果
    题目:分发糖果n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果:每个孩子至少分配到1个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。请你给每个孩子分发糖果,计算并返回需要准备的最少糖果数目。示例......
  • 【力扣150&Golang】加油站
    题目:加油站在一条环路上有n个加油站,其中第i个加油站有汽油gas[i]升。你有一辆油箱容量无限的的汽车,从第i个加油站开往第i+1个加油站需要消耗汽油cost[i]升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组gas和cost,如果你可以按顺序绕环路行......
  • Springboot高校学生奖、助学金管理系统t0v2u(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,奖助学金,奖助学金申请,贫困生申请,奖助学金发放,工作类型,勤工助学岗位,岗位申请开题报告内容一、研究背景随着高等教育的普及和学生数量的不断增加,高校......
  • Springboot高校学科竞赛赛事管理1313s(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表评委老师,学生,竞赛类型,竞赛信息,参赛记录,竞赛成绩开题报告内容一、选题背景随着高校教育的快速发展和学科竞赛的日益普及,建立一个高效、便捷、公平的学科竞......
  • Springboot高校失物招领信息平台h8spk(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,物品分类,招领启事,寻物启事开题报告内容一、研究背景与意义在高校中,由于学生人数众多且流动性大,个人物品的遗失事件时有发生。这些失物可能包含有价值的......
  • Starrocks表的数据库字段类型及与MySQL 的差异
    最近有用到Starrocks,实际使用中基本可以当作mysql来使用,但是数据库字段还是有所不同的。与MySQL相同或相似的基础类型数值类型TINYINT、SMALLINT、INT/INTEGER、BIGINT:在Starrocks和MySQL中的定义和用途基本相似。都是用于存储整数,范围也和MySQL中的对应类型相同,例如TI......
  • 基于JSP本科生毕业设计选题系统的设计与实现<免费开题>全套源码+文章lw+毕业设计+课程设
    基于JSP本科生毕业设计选题系统的设计与实现<免费开题>全套源码+文章lw+毕业设计+课程设计+数据库+ppt摘要随着高校信息化管理系统平台的广泛应用,文件信息的传递不再受到时间和空间的制约,毕业设计是高校教学管理的重要工作内容之一,随着高校毕业设计数量的逐年递增,毕业设计......