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

方法二

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

相关推荐
冰冰菜的扣jio2 分钟前
Redis缓存问题——一致性问题、事务、持久化
java·spring·mybatis
施棠海12 分钟前
监听与回调的三个demo
java·开发语言
毕设源码-钟学长1 小时前
【开题答辩全过程】以 家政服务平台为例,包含答辩的问题和答案
java
CCPC不拿奖不改名1 小时前
SQL基础(SQL小白教程):MySQL语句+环境一键搭建+面试习题
数据库·sql·计算机网络·mysql·oracle·面试·职场和发展
踩坑记录1 小时前
leetcode hot100 189.轮转数组 medium
leetcode
Dream it possible!2 小时前
LeetCode 面试经典 150_二分查找_在排序数组中查找元素的第一个和最后一个位置(115_34_C++_中等)
c++·leetcode·面试
sheji34163 小时前
【开题答辩全过程】以 家庭教育资源网为例,包含答辩的问题和答案
java
百***78753 小时前
Grok-4.1与GPT-5.2深度对比:技术差异、适用场景及Python集成指南
java·python·gpt
Mr -老鬼3 小时前
Java VS Rust
java·开发语言·rust