当前位置: 首页 > news >正文

力扣-市场分析

大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。

文章目录

  • 前言
  • 一、题目:1158. 市场分析
  • 二、解题
    • 1.错误示范①
      • 提交SQL
      • 运行结果
    • 2.正确示范①
      • 提交SQL
      • 运行结果
    • 3.错误示范②
      • 提交SQL
      • 运行结果
    • 4.正确示范②
      • 提交SQL
      • 运行结果
    • 5.其他
  • 总结


前言


一、题目:1158. 市场分析

Table: Users

+----------------+---------+
| Column Name    | Type    |
+----------------+---------+
| user_id        | int     |
| join_date      | date    |
| favorite_brand | varchar |
+----------------+---------+
此表主键是 user_id。
表中描述了购物网站的用户信息,用户可以在此网站上进行商品买卖。

Table: Orders

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| order_id      | int     |
| order_date    | date    |
| item_id       | int     |
| buyer_id      | int     |
| seller_id     | int     |
+---------------+---------+
此表主键是 order_id。
外键是 item_id 和(buyer_id,seller_id)。

Table: Items

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| item_id       | int     |
| item_brand    | varchar |
+---------------+---------+
此表主键是 item_id。

请写出一条SQL语句以查询每个用户的注册日期和在 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              |
+-----------+------------+----------------+

二、解题

1.错误示范①

提交SQL

select u1.user_id buyer_id,
u1.join_date,
count(1) orders_in_2019
from Users u1
left join Orders u2 
on u1.user_id=u2.buyer_id and substr(u2.order_date,1,4)='2019'
group by u1.user_id,u1.join_date

运行结果

2.正确示范①

提交SQL

select u1.user_id buyer_id,
u1.join_date,
count(u2.order_id) orders_in_2019
from Users u1
left join Orders u2 
on u1.user_id=u2.buyer_id and substr(u2.order_date,1,4)='2019'
group by u1.user_id,u1.join_date

运行结果

3.错误示范②

提交SQL

select u1.user_id buyer_id,
u1.join_date,
u2.num orders_in_2019
from Users u1
left join (select buyer_id,count(1) numfrom Orders where substr(order_date,1,4)='2019'group by buyer_id
) u2
on u1.user_id=u2.buyer_id

运行结果

4.正确示范②

提交SQL

select u1.user_id buyer_id,
u1.join_date,
ifnull(u2.num,0) orders_in_2019
from Users u1
left join (select buyer_id,count(1) numfrom Orders where substr(order_date,1,4)='2019'group by buyer_id
) u2
on u1.user_id=u2.buyer_id

或者

select u1.user_id buyer_id,
u1.join_date,
# ifnull(u2.num,0) orders_in_2019
case when u2.num is null then 0 else u2.num end as orders_in_2019
from Users u1
left join (select buyer_id,count(1) numfrom Orders where substr(order_date,1,4)='2019'group by buyer_id
) u2
on u1.user_id=u2.buyer_id

或者

select u1.user_id buyer_id,
u1.join_date,
ifnull(u2.num,0) orders_in_2019
from Users u1
left join (select buyer_id,count(1) numfrom Orders where year(order_date)='2019'group by buyer_id
) u2
on u1.user_id=u2.buyer_id

运行结果

5.其他


总结

错误示范①错在返回的无订单数是仍是1,应该把count(1)改为count(u2.order_id);
错误示范②错在返回的无订单数是null,应该把null转换成0;
知识点:
取2019年可以用substr(order_date,1,4)=‘2019’,也可以用year(order_date)=‘2019’;
将null转换成0可以用ifnull(u2.num,0),也可以用case when u2.num is null then 0 else u2.num end;
count(1)和count(指定字段)区别:
count(1) 会统计表中的所有的记录数,同count(*) ,包含字段为null 的记录。
count(指定字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。不统计字段为null 的记录。

http://www.lryc.cn/news/18472.html

相关文章:

  • 【2357. 使数组中所有元素都等于零】
  • 什么品牌的游戏蓝牙耳机比较好?玩游戏延迟低的蓝牙耳机推荐
  • day 33 状态压缩dp
  • 扬帆优配|超3600股飘绿,人民币贬值近300点!外资净卖近38亿
  • 【编程基础之Python】6、Python基础知识
  • selenium基本操作
  • 思科设备命令讲解(超基础二)
  • HTML基础(3)
  • 鸿蒙3.0 APP混合开发闪退问题笔记
  • 批量操作文件功能-课后程序(JAVA基础案例教程-黑马程序员编著-第七章-课后作业)
  • Hadoop3.3.1完全分布式部署
  • SpringMVC中的注解
  • python+Vue学生作业系统 django课程在线学习网站系统
  • CSS 美化网页元素【快速掌握知识点】
  • Tableau连接openGauss实践
  • RabbitMQ 实现延迟队列
  • Spring Bean 生命周期,好像人的一生
  • C++算法基础课 05 —— 数据结构1_单链表/双链表/栈/单调栈/队列/单调队列/KMP
  • 小型水库大坝安全监测的主要对象
  • 常见软件开源(alpha,beta等)版本介绍
  • 凌恩生物资讯|抗性宏基因组又一力作|抗性基因+可移动元件研究新成果!
  • 常见前端基础面试题(HTML,CSS,JS)(二)
  • 按关键词搜索,商品详情采集,API接口
  • C++的纯虚函数使用与接口实现
  • Exception has occurred: ModuleNotFoundErrorNo module named ‘urllib3‘【已解决】
  • CSS 盒子模型【快速掌握知识点】
  • 公网远程连接Oracle数据库【内网穿透】
  • 国内售价仅10元的鸭子滑梯玩具TK卖到20美元,相关视频获400万+播放!
  • 直播平台的视频美颜sdk是什么?
  • 实现Vue组件库