力扣1083-销售分析II

表:Product

复制代码
+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| product_id   | int     |
| product_name | varchar |
| unit_price   | int     |
+--------------+---------+
Product_id 是该表的主键(具有唯一值的列)。
该表的每一行表示每种产品的名称和价格。

表:Sales

复制代码
+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| seller_id   | int     |
| product_id  | int     |
| buyer_id    | int     |
| sale_date   | date    |
| quantity    | int     |
| price       | int     |
+------ ------+---------+
这个表可能有重复的行。
product_id 是 Product 表的外键(reference 列)。
buyer_id 永远不会是 NULL。
sale_date 永远不会是 NULL。
该表的每一行都包含一次销售的一些信息。

编写一个解决方案,报告那些买了 S8 而没有买 iPhone买家 。注意,S8iPhoneProduct 表中显示的产品。

任意顺序 返回结果表。

结果格式如下所示。

示例 1:

复制代码
输入:
Product table:
+------------+--------------+------------+
| product_id | product_name | unit_price |
+------------+--------------+------------+
| 1          | S8           | 1000       |
| 2          | G4           | 800        |
| 3          | iPhone       | 1400       |
+------------+--------------+------------+
Sales table:
+-----------+------------+----------+------------+----------+-------+
| seller_id | product_id | buyer_id | sale_date  | quantity | price |
+-----------+------------+----------+------------+----------+-------+
| 1         | 1          | 1        | 2019-01-21 | 2        | 2000  |
| 1         | 2          | 2        | 2019-02-17 | 1        | 800   |
| 2         | 1          | 3        | 2019-06-02 | 1        | 800   |
| 3         | 3          | 3        | 2019-05-13 | 2        | 2800  |
+-----------+------------+----------+------------+----------+-------+
输出:
+-------------+
| buyer_id    |
+-------------+
| 1           |
+-------------+
解释:
id 为 1 的买家购买了一部 S8,但是却没有购买 iPhone,而 id 为 3 的买家却同时购买了这 2 部手机。

思路:

1、首先两个表关联;

2、case when 判断是否有卖S8和iPhone,有为1 否则为0

3、根据题目要求,"买了 S8 而没有买 iPhone买家",所以sum(S8)>0 ,sum(iPhone)=0;

代码:

sql 复制代码
select 
buyer_id 
from product t1
join sales t2 on t1.product_id= t2.product_id
group by buyer_id
having sum(case when product_name = 'S8'then 1 else 0 end) > 0 
   and sum(case when product_name = 'iPhone' then 1 else 0 end) = 0
;
相关推荐
老鼠只爱大米15 小时前
LeetCode算法题详解 56:合并区间
leetcode·并查集·合并区间·区间合并·线性扫描·算法面试
鱼跃鹰飞15 小时前
Leetcode尊享面试100题:252. 会议室
算法·leetcode·面试
知识分享小能手15 小时前
Oracle 19c入门学习教程,从入门到精通,Oracle管理工具 —— 知识点详解(3)
数据库·学习·oracle
沃达德软件16 小时前
警务指挥情报中心建设
大数据·数据仓库·数据库开发
悟道|养家16 小时前
批量处理与向量化计算(8)
数据库·oracle·性能优化
程序员-King.16 小时前
day131—链表—反转链表Ⅱ(区域反转)(LeetCode-92)
leetcode·链表·贪心算法
圣保罗的大教堂16 小时前
leetcode 2943. 最大化网格图中正方形空洞的面积 中等
leetcode
lkbhua莱克瓦2416 小时前
进阶-锁章节
数据库·sql·mysql·oracle·存储过程·
肥大毛16 小时前
Oracle中Merge Using用法
数据库·oracle
banjin16 小时前
轻量化时序数据库新选择:KaiwuDB-Lite 实战体验
数据库·oracle·边缘计算·时序数据库·kaiwudb·kwdb