【力扣 | SQL题 | 每日三题】力扣1264, 1113, 1098, 1082

ops/2024/10/22 16:27:36/

1. 力扣1264:页面推荐

1.1 题目:

朋友关系列表: Friendship

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| user1_id      | int     |
| user2_id      | int     |
+---------------+---------+
(user1_id, user2_id) 是这张表具有唯一值的列的组合。
这张表的每一行代表着 user1_id 和 user2_id 之间存在着朋友关系。

喜欢列表: Likes

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| user_id     | int     |
| page_id     | int     |
+-------------+---------+
(user_id, page_id) 是这张表具有唯一值的列的组合。
这张表的每一行代表着 user_id 喜欢 page_id。

编写解决方案,向user_id = 1 的用户,推荐其朋友们喜欢的页面。不要推荐该用户已经喜欢的页面。

以 任意顺序 返回结果,其中不应当包含重复项。

返回结果的格式如下例所示。

示例 1:

输入:
Friendship table:
+----------+----------+
| user1_id | user2_id |
+----------+----------+
| 1        | 2        |
| 1        | 3        |
| 1        | 4        |
| 2        | 3        |
| 2        | 4        |
| 2        | 5        |
| 6        | 1        |
+----------+----------+Likes table:
+---------+---------+
| user_id | page_id |
+---------+---------+
| 1       | 88      |
| 2       | 23      |
| 3       | 24      |
| 4       | 56      |
| 5       | 11      |
| 6       | 33      |
| 2       | 77      |
| 3       | 77      |
| 6       | 88      |
+---------+---------+输出:
+------------------+
| recommended_page |
+------------------+
| 23               |
| 24               |
| 56               |
| 33               |
| 77               |
+------------------+
解释:
用户1 同 用户2, 3, 4, 6 是朋友关系。
推荐页面为: 页面23 来自于 用户2, 页面24 来自于 用户3, 页面56 来自于 用户3 以及 页面33 来自于 用户6。
页面77 同时被 用户2 和 用户3 推荐。
页面88 没有被推荐,因为 用户1 已经喜欢了它。

1.2 思路:

看注释。

1.3 题解:

sql">--因为用户1可能喜欢多个页面,所以将其全部过滤掉
-- where page_id not in (
--         select page_id
--         from Likes
--         where user_id = 1
-- )--if函数收集用户1的所有朋友
-- where user_id in (
--     select if(user1_id = 1, user2_id, user1_id) user_id 
--     from Friendship
--     where user1_id = 1 or user2_id = 1
-- )--从过滤的l表中逐一比较记录,判断是否是朋友喜欢的页面-- 最后不要忘了过滤一下重复元素select distinct page_id recommended_page
from (select *from Likes where page_id not in (select page_idfrom Likeswhere user_id = 1)) l 
where user_id in (select if(user1_id = 1, user2_id, user1_id) user_id from Friendshipwhere user1_id = 1 or user2_id = 1
)

2. 力扣1113:报告的记录

2.1 题目:

动作表:Actions

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| user_id       | int     |
| post_id       | int     |
| action_date   | date    | 
| action        | enum    |
| extra         | varchar |
+---------------+---------+
此表可能会有重复的行。
action 字段是 ENUM 类型的,包含:('view', 'like', 'reaction', 'comment', 'report', 'share')
extra 包含关于 action 的可选信息,例如举报的原因或反馈的类型。
当 action 为 'report' 时 extra 不会为 NULL。

编写解决方案,针对每个举报原因统计昨天的举报帖子数量。假设今天是 2019-07-05 。

返回结果表 无顺序要求 

结果格式如下示例所示。

示例 1:

输入:
Actions table:
+---------+---------+-------------+--------+--------+
| user_id | post_id | action_date | action | extra  |
+---------+---------+-------------+--------+--------+
| 1       | 1       | 2019-07-01  | view   | null   |
| 1       | 1       | 2019-07-01  | like   | null   |
| 1       | 1       | 2019-07-01  | share  | null   |
| 2       | 4       | 2019-07-04  | view   | null   |
| 2       | 4       | 2019-07-04  | report | spam   |
| 3       | 4       | 2019-07-04  | view   | null   |
| 3       | 4       | 2019-07-04  | report | spam   |
| 4       | 3       | 2019-07-02  | view   | null   |
| 4       | 3       | 2019-07-02  | report | spam   |
| 5       | 2       | 2019-07-04  | view   | null   |
| 5       | 2       | 2019-07-04  | report | racism |
| 5       | 5       | 2019-07-04  | view   | null   |
| 5       | 5       | 2019-07-04  | report | racism |
+---------+---------+-------------+--------+--------+
输出:
+---------------+--------------+
| report_reason | report_count |
+---------------+--------------+
| spam          | 1            |
| racism        | 2            |
+---------------+--------------+ 
解释:注意,我们只关心举报帖数量非零的举报原因。

2.2 思路:

我也没看懂题目的意思,根据输入输出表凑的答案。

2.3 题解:

sql">select extra report_reason, count(distinct post_id) report_count
from (select *from Actionswhere action_date = '2019-07-04' and extra is not nulland action = 'report'
) a 
group by extra

3. 力扣1098:小众书籍

3.1 题目:

书籍表 Books

+----------------+---------+
| Column Name    | Type    |
+----------------+---------+
| book_id        | int     |
| name           | varchar |
| available_from | date    |
+----------------+---------+
book_id 是这个表的主键(具有唯一值的列)。

订单表 Orders

+----------------+---------+
| Column Name    | Type    |
+----------------+---------+
| order_id       | int     |
| book_id        | int     |
| quantity       | int     |
| dispatch_date  | date    |
+----------------+---------+
order_id 是这个表的主键(具有唯一值的列)。
book_id  是 Books 表的外键(reference 列)。

编写解决方案,筛选出过去一年中订单总量 少于 10 本 的 书籍,并且 不考虑 上架距今销售 不满一个月 的书籍 假设今天是 2019-06-23 

返回结果表 无顺序要求 。

结果格式如下所示。

示例 1:

输入:
Books 表:
+---------+--------------------+----------------+
| book_id | name               | available_from |
+---------+--------------------+----------------+
| 1       | "Kalila And Demna" | 2010-01-01     |
| 2       | "28 Letters"       | 2012-05-12     |
| 3       | "The Hobbit"       | 2019-06-10     |
| 4       | "13 Reasons Why"   | 2019-06-01     |
| 5       | "The Hunger Games" | 2008-09-21     |
+---------+--------------------+----------------+
Orders 表:
+----------+---------+----------+---------------+
| order_id | book_id | quantity | dispatch_date |
+----------+---------+----------+---------------+
| 1        | 1       | 2        | 2018-07-26    |
| 2        | 1       | 1        | 2018-11-05    |
| 3        | 3       | 8        | 2019-06-11    |
| 4        | 4       | 6        | 2019-06-05    |
| 5        | 4       | 5        | 2019-06-20    |
| 6        | 5       | 9        | 2009-02-02    |
| 7        | 5       | 8        | 2010-04-13    |
+----------+---------+----------+---------------+
输出:
+-----------+--------------------+
| book_id   | name               |
+-----------+--------------------+
| 1         | "Kalila And Demna" |
| 2         | "28 Letters"       |
| 5         | "The Hunger Games" |
+-----------+--------------------+

3.2 思路:

看注释。

3.3 题解:

sql">select b.book_id, name
from (
-- 不考虑 上架距今销售 不满一个月 的书籍 select book_id, namefrom Bookswhere available_from <= '2019-05-23'
) b left join (select book_id, sum(quantity) sum, count(*) cntfrom Orders o -- 过去一年中订单总量 少于 10 本 的 书籍where dispatch_date >= '2018-06-23' and dispatch_date <= '2019-06-23'group by book_id
) o
on o.book_id = b.book_id
-- -- 左外连接,如果cnt为null表明该书在过去一年订单量为0,满足题目意思。
where cnt is null or sum < 10

4. 力扣1082:销售分析1

4.1 题目:

产品表:Product

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| product_id   | int     |
| product_name | varchar |
| unit_price   | int     |
+--------------+---------+
product_id 是这个表的主键(具有唯一值的列)。
该表的每一行显示每个产品的名称和价格。

销售表:Sales

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| seller_id   | int     |
| product_id  | int     |
| buyer_id    | int     |
| sale_date   | date    |
| quantity    | int     |
| price       | int     |
+------ ------+---------+
这个表它可以有重复的行。 
product_id 是 Product 表的外键(reference 列)。
该表的每一行包含关于一个销售的一些信息。

编写解决方案,找出总销售额最高的销售者,如果有并列的,就都展示出来。

以 任意顺序 返回结果表。

返回结果格式如下所示。

示例 1:

输入:
Product 表:
+------------+--------------+------------+
| product_id | product_name | unit_price |
+------------+--------------+------------+
| 1          | S8           | 1000       |
| 2          | G4           | 800        |
| 3          | iPhone       | 1400       |
+------------+--------------+------------+
Sales 表:
+-----------+------------+----------+------------+----------+-------+
| seller_id | product_id | buyer_id | sale_date  | quantity | price |
+-----------+------------+----------+------------+----------+-------+
| 1         | 1          | 1        | 2019-01-21 | 2        | 2000  |
| 1         | 2          | 2        | 2019-02-17 | 1        | 800   |
| 2         | 2          | 3        | 2019-06-02 | 1        | 800   |
| 3         | 3          | 4        | 2019-05-13 | 2        | 2800  |
+-----------+------------+----------+------------+----------+-------+
输出:
+-------------+
| seller_id   |
+-------------+
| 1           |
| 3           |
+-------------+
解释:Id 为 1 和 3 的销售者,销售总金额都为最高的 2800。

4.2 思路:

看注释。

4.3 题解:

sql">-- 先找到每个卖者的销售者总和
-- from (
--     select sum(price) sum
--     from Sales
--     group by seller_id
-- ) s-- 然后再找总销售额最大的价钱
-- select max(sum)
--     from (
--         select sum(price) sum
--         from Sales
--         group by seller_id
--     ) sselect seller_id
from Product p
join Sales s 
on p.product_id = s.product_id   
group by seller_id
having sum(price) = (select max(sum)from (select sum(price) sumfrom Salesgroup by seller_id) s
)


http://www.ppmy.cn/ops/121154.html

相关文章

封装了一个iOS水平方向动态宽度layout

我们有时候会遇到这样的情形&#xff0c;就是需要展示一些动态的标签&#xff0c;宽度是动态的&#xff0c; 水平方向是一行&#xff0c;其实这种情况还是比较容易处理的&#xff0c;只是一下子想不起来&#xff0c; 这里做了一个相关的需求&#xff0c;将思路和代码记录下来&a…

蓝桥等级考试C++组17级真题-2023-05-21

单项选择题 **1、CL17(15分)**选择题 关于面向对象&#xff0c;以下说法正确的是( ) A. C语言是面向对象的语言 B. C语言只支持面向对象的程序设计 C. C语言是面向对象的语言&#xff0c;但C语言不是 D. C语言中的类和int、char等类型一样&#xff0c;都是基本数据类型 2、CL1…

安全服务面试

118.什么叫脱壳? 而从技术的角度出发&#xff0c;壳是一段执行于原始程序前的代码。原始程序的代码在加 壳的过程中可能被压缩、加密……。当加壳后的文件执行时&#xff0c;壳&#xff0d;这段代码先于 原始程序运行&#xff0c;他把压缩、加密后的代码还原成原始程序代码…

基于NFSR和S盒的国产流密码算法Bagua

基于NFSR和S盒的国产流密码算法Bagua 0x0 Bagua算法简介 流密码算法Bagua是面向5G数据通信、面向硬件设计的密码算法。它是由国内知名密码专家学者谭林、朱宣勇、戚文峰共同设计的密码算法,发表在2020年国际信息安全与密码会议上(Inscrypt 2020)。该算法是基于Galois结构的非…

python 实现linear algebra线性代数算法

linear algebra线性代数算法介绍 线性代数&#xff08;Linear Algebra&#xff09;是一个广泛的数学领域&#xff0c;涵盖了多个算法和概念&#xff0c;这些算法和概念在处理向量、矩阵、线性方程组、线性变换等方面发挥着重要作用。以下是一些线性代数中常见的算法和概念&…

Pikachu-Sql Inject-数字型注入(GET)

一、、破解 SQL 查询语句中的字段数 ?id1 order by 3 -- // -- 是注释&#xff0c; 加号 在MySQL中会转成空格 order by 1 &#xff0c;by 数字几&#xff0c;就是按照第几列进行排序&#xff1b;如果没有这一行&#xff0c;则报错 如&#xff1a;以下语句&#xff0c;根据…

HTTP【网络】

文章目录 HTTPURL(Uniform Resource Lacator) HTTP协议格式HTTP的方法HTTP的状态码HTTP常见的Header HTTP 超文本传输协议&#xff0c;是一个简单的请求-响应协议&#xff0c;HTTP通常运行在TCP之上 URL(Uniform Resource Lacator) 一资源定位符&#xff0c;也就是通常所说的…

VTK 与 OpenCV 的区别和各自的特点

VTK与OpenCV&#xff1a;各有所长&#xff0c;相辅相成 VTK和OpenCV都是强大的图像处理和计算机视觉工具&#xff0c;但它们在侧重点和功能上有着显著的区别。 1 VTK (Visualization Toolkit) 核心功能&#xff1a; VTK专注于三维可视化。它能够将复杂的数据&#xff08;如医…