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

方法二

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

相关推荐
ybq1951334543116 分钟前
Redis-主从复制-分布式系统
java·数据库·redis
weixin_472339461 小时前
高效处理大体积Excel文件的Java技术方案解析
java·开发语言·excel
小毛驴8501 小时前
Linux 后台启动java jar 程序 nohup java -jar
java·linux·jar
DKPT2 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
好奇的菜鸟3 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
满昕欢喜4 小时前
SQL Server从入门到项目实践(超值版)读书笔记 20
数据库·sql·sqlserver
DuelCode4 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
优创学社24 小时前
基于springboot的社区生鲜团购系统
java·spring boot·后端
幽络源小助理4 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
猴哥源码4 小时前
基于Java+springboot 的车险理赔信息管理系统
java·spring boot