建设特效网站,图片在线设计网站,推广网站建设产品介绍,抄袭网站怎么办大家好#xff0c;我是空空star#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目#xff1a;1158. 市场分析二、解题1.错误示范①提交SQL运行结果2.正确示范①提交SQL运行结果3.错误示范②提交SQL运行结果4.正确示范②提交SQL运行结果5.其他总结前… 大家好我是空空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_idseller_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_idu2.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_idu2.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)2019group by buyer_id
) u2
on u1.user_idu2.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)2019group by buyer_id
) u2
on u1.user_idu2.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)2019group by buyer_id
) u2
on u1.user_idu2.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)2019group by buyer_id
) u2
on u1.user_idu2.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 的记录。