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

方法二

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

相关推荐
Navigator_Z28 分钟前
LeetCode //C - 1200. Minimum Absolute Difference
c语言·算法·leetcode
赵广陆37 分钟前
企业实战:Markdown图片检索
android·java·开发语言
C++、Java和Python的菜鸟38 分钟前
第3章 从0开始用若依
java·开发语言
wabs66639 分钟前
关于字符串【力扣344.反转字符串的思考】
数据结构·算法·leetcode
Json____1 小时前
五金制品行业-企业官网源码
java·大数据·数据库·企业站·wwwoop.com
Nil2082 小时前
leetcode 73矩阵置0
算法·leetcode·矩阵
counting money2 小时前
Spring AI Alibaba 从入门到实战:构建企业级 AI 应用
java·人工智能·spring
原野池予3 小时前
深入Java集合框架:数组与List互转底层原理剖析(JDK 8)
java·数据结构·list
Java成神之路-3 小时前
深入理解 HashMap 扩容时机:JDK 7 vs JDK 8 的设计差异与取舍
java·juc
李冰然3 小时前
深入Java集合框架:数组与List互转底层原理剖析(JDK 8)
java