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

方法二

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

相关推荐
vvilkim3 小时前
Java主流框架全解析:从企业级开发到云原生
java·运维·云原生
MZ_ZXD0014 小时前
springboot汽车租赁服务管理系统-计算机毕业设计源码58196
java·c++·spring boot·python·django·flask·php
A 计算机毕业设计-小途4 小时前
大四零基础用Vue+ElementUI一周做完化妆品推荐系统?
java·大数据·hadoop·python·spark·毕业设计·毕设
快去睡觉~6 小时前
力扣73:矩阵置零
算法·leetcode·矩阵
岁忧6 小时前
(nice!!!)(LeetCode 每日一题) 679. 24 点游戏 (深度优先搜索)
java·c++·leetcode·游戏·go·深度优先
小欣加油6 小时前
leetcode 3 无重复字符的最长子串
c++·算法·leetcode
不羁。。7 小时前
【撸靶笔记】第八关:GET - Blind - Boolian Based - Single Quotes
数据库·sql·mybatis
猿究院--王升9 小时前
jvm三色标记
java·jvm·算法
妮妮学代码9 小时前
c#:TCP服务端管理类
java·tcp/ip·c#
兔老大RabbitMQ10 小时前
git pull origin master失败
java·开发语言·git