SQL-leetcode—1158. 市场分析 I

1158. 市场分析 I

表: Users

±---------------±--------+

| Column Name | Type |

±---------------±--------+

| user_id | int |

| join_date | date |

| favorite_brand | varchar |

±---------------±--------+

user_id 是此表主键(具有唯一值的列)。

表中描述了购物网站的用户信息,用户可以在此网站上进行商品买卖。

表: Orders

±--------------±--------+

| Column Name | Type |

±--------------±--------+

| order_id | int |

| order_date | date |

| item_id | int |

| buyer_id | int |

| seller_id | int |

±--------------±--------+

order_id 是此表主键(具有唯一值的列)。

item_id 是 Items 表的外键(reference 列)。

(buyer_id,seller_id)是 User 表的外键。

表:Items

±--------------±--------+

| Column Name | Type |

±--------------±--------+

| item_id | int |

| item_brand | varchar |

±--------------±--------+

item_id 是此表的主键(具有唯一值的列)。

编写解决方案找出每个用户的注册日期和在 2019 年作为买家的订单总数。

以 任意顺序 返回结果表。

查询结果格式如下。

示例 1:

输入:

Users 表:

±--------±-----------±---------------+

| user_id | join_date | favorite_brand |

±--------±-----------±---------------+

| 1 | 2018-01-01 | Lenovo |

| 2 | 2018-02-09 | Samsung |

| 3 | 2018-01-19 | LG |

| 4 | 2018-05-21 | HP |

±--------±-----------±---------------+

Orders 表:

±---------±-----------±--------±---------±----------+

| order_id | order_date | item_id | buyer_id | seller_id |

±---------±-----------±--------±---------±----------+

| 1 | 2019-08-01 | 4 | 1 | 2 |

| 2 | 2018-08-02 | 2 | 1 | 3 |

| 3 | 2019-08-03 | 3 | 2 | 3 |

| 4 | 2018-08-04 | 1 | 4 | 2 |

| 5 | 2018-08-04 | 1 | 3 | 4 |

| 6 | 2019-08-05 | 2 | 2 | 4 |

±---------±-----------±--------±---------±----------+

Items 表:

±--------±-----------+

| item_id | item_brand |

±--------±-----------+

| 1 | Samsung |

| 2 | Lenovo |

| 3 | LG |

| 4 | HP |

±--------±-----------+

输出:

±----------±-----------±---------------+

| buyer_id | join_date | orders_in_2019 |

±----------±-----------±---------------+

| 1 | 2018-01-01 | 1 |

| 2 | 2018-02-09 | 2 |

| 3 | 2018-01-19 | 0 |

| 4 | 2018-05-21 | 0 |

±----------±-----------±---------------+

题解

找出每个用户的注册日期和在 2019 年作为买家的订单总数。

  • 每个用户的注册日期,说明用户表要是主表,得join
  • 2019 年作为买家的订单总数
    • 2019 是个条件 where
    • 订单总数 group by count

方法一 join

复制代码
select
    u1.user_id as buyer_id
    ,u1.join_date as join_date
    ,ifnull(o1.orders_in_2019,0) as orders_in_2019
from (
    select buyer_id,count(order_id) as orders_in_2019 from Orders where year(order_date)=2019 group by buyer_id
) o1
right join Users u1 on o1.buyer_id = u1.user_id

方法二

就上面的方式,好像也没有更简洁的方式了

相关推荐
namexingyun8 小时前
GPT-5.6 前端生成能力深度解析:kindle/kepler/Levi三版本UI实测与技术推演
java·前端·人工智能·gpt·机器学习·ui
码界索隆8 小时前
Python转Java系列:语法与类型系统
java·开发语言·python
asdfg12589638 小时前
入门后端开发从一本Java书开始
java
ch.ju8 小时前
Java程序设计(第3版)第四章——编译中的错误:无法覆盖
java·开发语言
JAVA面经实录9178 小时前
ZooKeeper 完整知识体系
java·zookeeper·架构
我认不到你8 小时前
【开源、教程】RAG全流程实现(java+完整代码):第二弹
java·开发语言·人工智能·深度学习·ai·语言模型·开源
dd06s8 小时前
安卓上传依赖到maven私有仓库
android·java·maven
折哥的程序人生 · 物流技术专研8 小时前
Java 23 种设计模式:从踩坑到精通 | 适配器模式 —— 让不兼容的接口也能一起工作
java·设计模式·面试·适配器模式·单一职责原则
洛水水8 小时前
【力扣100题】80.寻找旋转排序数组中的最小值
数据结构·算法·leetcode