首页 > 其他分享 >1159. 市场分析 II

1159. 市场分析 II

时间:2024-11-15 14:43:31浏览次数:3  
标签:分析 1159 brand order II item 2019 user id

目录

题目链接(无VIP请直接看下面的需求)

题目和题目代码

表: 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 是 Users 表的外键。
表: Items

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| item_id       | int     |
| item_brand    | varchar |
+---------------+---------+
item_id 是该表的主键(具有唯一值的列)。
 

编写一个解决方案,为每个用户找出他们出售的第二件商品(按日期)的品牌是否是他们最喜欢的品牌。如果用户售出的商品少于两件,则该用户的结果为否。保证卖家不会在一天内卖出一件以上的商品。

 

以 任意顺序 返回结果表。

返回结果格式如下例所示:

 

示例 1:

输入:
Users table:
+---------+------------+----------------+
| user_id | join_date  | favorite_brand |
+---------+------------+----------------+
| 1       | 2019-01-01 | Lenovo         |
| 2       | 2019-02-09 | Samsung        |
| 3       | 2019-01-19 | LG             |
| 4       | 2019-05-21 | HP             |
+---------+------------+----------------+
Orders table:
+----------+------------+---------+----------+-----------+
| order_id | order_date | item_id | buyer_id | seller_id |
+----------+------------+---------+----------+-----------+
| 1        | 2019-08-01 | 4       | 1        | 2         |
| 2        | 2019-08-02 | 2       | 1        | 3         |
| 3        | 2019-08-03 | 3       | 2        | 3         |
| 4        | 2019-08-04 | 1       | 4        | 2         |
| 5        | 2019-08-04 | 1       | 3        | 4         |
| 6        | 2019-08-05 | 2       | 2        | 4         |
+----------+------------+---------+----------+-----------+
Items table:
+---------+------------+
| item_id | item_brand |
+---------+------------+
| 1       | Samsung    |
| 2       | Lenovo     |
| 3       | LG         |
| 4       | HP         |
+---------+------------+
输出:
+-----------+--------------------+
| seller_id | 2nd_item_fav_brand |
+-----------+--------------------+
| 1         | no                 |
| 2         | yes                |
| 3         | yes                |
| 4         | no                 |
+-----------+--------------------+
解释:
id 为 1 的用户的查询结果是 no,因为他什么也没有卖出
id为 2 和 3 的用户的查询结果是 yes,因为他们卖出的第二件商品的品牌是他们最喜爱的品牌
id为 4 的用户的查询结果是 no,因为他卖出的第二件商品的品牌不是他最喜爱的品牌
Create table If Not Exists Users (user_id int, join_date date, favorite_brand varchar(10))
Create table If Not Exists Orders (order_id int, order_date date, item_id int, buyer_id int, seller_id int)
Create table If Not Exists Items (item_id int, item_brand varchar(10))
Truncate table Users
insert into Users (user_id, join_date, favorite_brand) values ('1', '2019-01-01', 'Lenovo')
insert into Users (user_id, join_date, favorite_brand) values ('2', '2019-02-09', 'Samsung')
insert into Users (user_id, join_date, favorite_brand) values ('3', '2019-01-19', 'LG')
insert into Users (user_id, join_date, favorite_brand) values ('4', '2019-05-21', 'HP')
Truncate table Orders
insert into Orders (order_id, order_date, item_id, buyer_id, seller_id) values ('1', '2019-08-01', '4', '1', '2')
insert into Orders (order_id, order_date, item_id, buyer_id, seller_id) values ('2', '2019-08-02', '2', '1', '3')
insert into Orders (order_id, order_date, item_id, buyer_id, seller_id) values ('3', '2019-08-03', '3', '2', '3')
insert into Orders (order_id, order_date, item_id, buyer_id, seller_id) values ('4', '2019-08-04', '1', '4', '2')
insert into Orders (order_id, order_date, item_id, buyer_id, seller_id) values ('5', '2019-08-04', '1', '3', '4')
insert into Orders (order_id, order_date, item_id, buyer_id, seller_id) values ('6', '2019-08-05', '2', '2', '4')
Truncate table Items
insert into Items (item_id, item_brand) values ('1', 'Samsung')
insert into Items (item_id, item_brand) values ('2', 'Lenovo')
insert into Items (item_id, item_brand) values ('3', 'LG')
insert into Items (item_id, item_brand) values ('4', 'HP')

1.读题(建议使用这种表结构和数据对比看阅读)

______________________________________________

在这里插入图片描述
编写一个解决方案,为每个用户找出他们 出售的第二件商品(按日期) 的品牌是否是他们最喜欢的品牌。如果用户售出的商品少于两件,则该用户的结果为否。保证卖家不会在一天内卖出一件以上的商品(意思是日期唯一的)。

2.答案代码以及图表解释

+--------+----------+-------+--------+---------+  +-------+----------+--------------+
|order_id|order_date|item_id|buyer_id|seller_id|  |user_id|join_date |favorite_brand|
|秩序_id |顺序_日期|项目_id    |买家_id   |卖家_id |  |用户_id |加入_     |最喜欢的日期_品牌|
+--------+----------+-------+--------+---------+  +-------+----------+--------------+
|1       |2019-08-01|4      |1       |2        |  |1      |2019-01-01|Lenovo        |
|2       |2019-08-02|2      |1       |3        |  |2      |2019-02-09|Samsung       |
|3       |2019-08-03|3      |2       |3        |  |3      |2019-01-19|LG            |
|4       |2019-08-04|1      |4       |2        |  |4      |2019-05-21|HP            |
|5       |2019-08-04|1      |3       |4        |  +-------+----------+--------------+
|6       |2019-08-05|2      |2       |4        |
+--------+----------+-------+--------+---------+  ;
+-------+----------+
|item_id|item_brand|
|项目_id |项目_品牌|
+-------+----------+
|1      |Samsung   |
|2      |Lenovo    |
|3      |LG        |
|4      |HP        |
+-------+----------+;

with a1 as (
select  order_date, seller_id, item_brand
from orders o
join items i on o.item_id = i.item_id)

,a2 as (
select user_id,
       dense_rank() over (partition by user_id order by order_date) dr
,if(dense_rank() over (partition by user_id order by order_date)=2 and favorite_brand=item_brand
           ,'yes','no') 2nd_item_fav_brand
from users u
join a1 on u.user_id = a1.seller_id)

select
    u.user_id seller_id,
       if(2nd_item_fav_brand is null,'no',2nd_item_fav_brand) 2nd_item_fav_brand
from users u
left join (select  user_id,2nd_item_fav_brand from a2 where dr=2) a22
on a22.user_id=u.user_id;
-------------------------------------------------------------------------------------------------
+--------+----------+-------+--------+---------+-------+----------+with a1 as (
|order_id|order_date|item_id|buyer_id|seller_id|item_id|item_brand|select  order_date, seller_id, item_brand
|秩序_id |顺序_日期   |项目_id |买家_id |卖家_id   |项目_id |项目_品牌| from orders o
+--------+----------+-------+--------+---------+-------+----------+join items i on o.item_id = i.item_id)
|1       |2019-08-01|4      |1       |2        |4      |HP        |
|2       |2019-08-02|2      |1       |3        |2      |Lenovo    |
|3       |2019-08-03|3      |2       |3        |3      |LG        |
|4       |2019-08-04|1      |4       |2        |1      |Samsung   |
|5       |2019-08-04|1      |3       |4        |1      |Samsung   |
|6       |2019-08-05|2      |2       |4        |2      |Lenovo    |
+--------+----------+-------+--------+---------+-------+----------+
-------------------------------------------------------------------------------
,a2 as (
select user_id,
       dense_rank() over (partition by user_id order by order_date) dr
,if(dense_rank() over (partition by user_id order by order_date)=2 and favorite_brand=item_brand
           ,'yes','no') 2nd_item_fav_brand
from users u
join a1 on u.user_id = a1.seller_id);
+-------+----------+--------------+--------+----------+--------+---------+-------+----------+--+------------------+
|user_id|join_date |favorite_brand|order_id|order_date|buyer_id|seller_id|item_id|item_brand|dr|2nd_item_fav_brand|
|用户_id |加入_      |最喜欢的日期_品牌|秩序_id |顺序_日期   |买家_id |卖家_id    |项目_id |项目_品牌|
+-------+----------+--------------+--------+----------+--------+---------+-------+----------+--+------------------+
|1      |2019-01-01|Lenovo        |null    |null      |null    |null     |null   |null      |1 |no                |

|2      |2019-02-09|Samsung       |1       |2019-08-01|1       |2        |4      |HP        |1 |no                |
|2      |2019-02-09|Samsung       |4       |2019-08-04|4       |2        |1      |Samsung   |2 |yes               |

|3      |2019-01-19|LG            |2       |2019-08-02|1       |3        |2      |Lenovo    |1 |no                |
|3      |2019-01-19|LG            |3       |2019-08-03|2       |3        |3      |LG        |2 |yes               |

|4      |2019-05-21|HP            |5       |2019-08-04|3       |4        |1      |Samsung   |1 |no                |
|4      |2019-05-21|HP            |6       |2019-08-05|2       |4        |2      |Lenovo    |2 |no                |
+-------+----------+--------------+--------+----------+--------+---------+-------+----------+--+------------------+
上下表关联left join
  +-------+----------+--------------+select
  |user_id|join_date |favorite_brand|    u.user_id seller_id,
   用户_id |加入_     |最喜欢的日期_品牌|       if(2nd_item_fav_brand is null,'no',2nd_item_fav_brand) 2nd_item_fav_brand
  +-------+----------+--------------+from users u
  |1      |2019-01-01|Lenovo        |left join (select  user_id,2nd_item_fav_brand from a2 where dr=2) a22
  |2      |2019-02-09|Samsung       |on a22.user_id=u.user_id;
  |3      |2019-01-19|LG            |
  |4      |2019-05-21|HP            |
  +-------+----------+--------------+
输出结果: +---------+------------------+
        |seller_id|2nd_item_fav_brand|
        +---------+------------------+
        |1        |no                |
        |2        |yes               |
        |3        |yes               |
        |4        |no                |
        +---------+------------------+
或者直接3join,但是分步减字段join效率高一些;
with
a2 as (
select user_id,
       dense_rank() over (partition by user_id order by order_date) dr
,if(dense_rank() over (partition by user_id order by order_date)=2 and favorite_brand=item_brand
           ,'yes','no') 2nd_item_fav_brand
from orders o
join items i on o.item_id = i.item_id
join users u on u.user_id = o.seller_id)

select
    u.user_id seller_id,
       if(2nd_item_fav_brand is null,'no',2nd_item_fav_brand) 2nd_item_fav_brand
from users u
left join (select  user_id,2nd_item_fav_brand from a2 where dr=2) a22
on a22.user_id=u.user_id;

在这里插入图片描述
在这里插入图片描述

不能用item_id去判断,这题item_id不同,品牌名称却可能相同,吐了
在这里插入图片描述

标签:分析,1159,brand,order,II,item,2019,user,id
From: https://blog.csdn.net/weixin_74002941/article/details/143779740

相关文章

  • 代码分析工具小结
    此文总结在平时开发过程中使用到的代码分析工具,分为静态分析和动态分析两个部分,本文只介绍Windows平台的工具。静态代码分析CppCheckCppCheck是一款经典的C/C++静态代码检查工具,笔者最开始使用的检查工具,帮助检查出了许多潜在缺陷,推荐首选,当前最新版本为2.16.0.下面介绍下笔......
  • Modbus TCP转Modbus ASCII解决方案
    ModbusTCP和ModbusASCII是两种不同的通信协议。ModbusTCP是一种二进制协议,ModbusASCII是一种基于文本的协议。二者不能直接转换,因为它们的数据表示方式、消息结构、字符编码等都不相同。如果你需要将ModbusTCP转换为ModbusASCII,你需要先解析ModbusTCP消息,然后按照ModbusA......
  • 视频智能分析网关反光衣检测算法在提升工人安全意识方面有哪些优势?
    在工业自动化和智能制造的浪潮中,工作场所的安全监控正变得越来越重要。反光衣检测视频分析网关正是为了满足这一需求而设计的高性能、低功耗的AI边缘计算硬件设备。以下是对视频智能分析网关视频分析网关的介绍,以及反光衣检测算法在提升工人安全意识方面的优势分析。一、产品介......
  • AI智能检测视频分析网关安全帽检测识别监控解决方案
    在当代建筑行业中,保障工人的安全始终是最为紧迫的议题。事故如高空坠落和物体撞击等频繁发生,严重威胁着工人的生命安全。安全帽作为一项基础的个人防护设备,其正确使用对于减轻事故伤害起着至关重要的作用。不过,依赖传统的人工检查方法不仅效率不高,还可能存在疏漏和错误判断,难以实......
  • Visual Studio 快速分析 .NET Dump 文件
    前言在开发和维护.NET应用程序的过程中,有时会遇到难以捉摸的性能瓶颈或内存泄漏等问题。这些问题往往发生在生产环境中,难以复现。为了更准确地诊断这些运行时问题,通常会收集应用程序在生产环境中的内存转储文件(.dump文件)。在这种情况下,分析内存转储文件(.dump文件)成为解决问题......
  • 某app最新版 vmp算法分析一
    本系列预计3篇某app使用了一种X开头的HTTP签名。该应用程序对服务器的请求在其标头中有6个x签名。该应用程序通常使用此签名来确保数据的安全性和完整性。代号花露水.6个x签名都来自古希腊神话中的某个神.分别是蛇发女妖(G),柯罗诺斯(K,时间之神),拉顿(L),阿尔戈斯(A),赫利......
  • 17章1节:文献计量分析基础
    计量科学是一门通过定量分析来研究各类科学现象、科学活动以及知识传播规律的学科,文献计量学是其重要分支之一。文献计量学通过应用统计学和数学模型,分析文献的生产、传播与影响力,揭示科研活动中的规律和趋势。该学科涉及到多种核心方法,如描述性分析、词频分析、共现分析、引......
  • 本地权限提升漏洞分析
    7.16版本之前的OracleVirtualBox容易受到通过符号链接的影响,导致任意文件删除和任意文件移动。当我们可以进行任意文件删除和任意文件移动时,我们就可以利用windows的机制使用该漏洞进行提权。本篇为CVE-2024-21111本地提权漏洞的漏洞分析。前言本篇为CVE-2024-21111......
  • 国标GB28181视频平台EasyCVR视频分析设备平台智慧小区安防建设:安装智能监控摄像头需要
    在现代社会,随着科技的飞速发展,智慧小区安防建设已经成为提升居民生活质量和安全感的重要手段。EasyCVR智慧小区安防建设方案,正是在这样的背景下,利用最新的视频监控技术和智能化管理平台,为小区安全保驾护航。这一方案不仅能够实现对小区的全面覆盖和高清监控,还能通过智能识别和联动......
  • 时序违例原因分析之 FPGA
    时序违例是FPGA设计过程中的一个常见问题,特别是当系统达到高速或复杂的级别时,故本文将重点探讨时序违例阶段中FPGA的原因分析。FPGA的设计在接收到时钟信号后,需要一定时间才能完成逻辑运算,但如果所需时间超过了时钟周期,就会导致时序违例,此时会发生一些奇怪的现象,例如输出数......