首页 > 其他分享 >力扣练习1264.页面推荐

力扣练习1264.页面推荐

时间:2024-10-25 21:19:50浏览次数:8  
标签:insert into Likes page 力扣 user 1264 id 页面

1264.页面推荐

一、题目链接

1264.页面推荐(需要会员)

二、题目描述

朋友关系列表: 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_iduser2_id
12
13
14
23
24
25
61

Likes table:

user_idpage_id
188
223
324
456
511
633
277
377
688

输出:

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 已经喜欢了它。

三、建表语句

Create table If Not Exists Friendship (user1_id int, user2_id int)
Create table If Not Exists Likes (user_id int, page_id int)
Truncate table Friendship
insert into Friendship (user1_id, user2_id) values ('1', '2')
insert into Friendship (user1_id, user2_id) values ('1', '3')
insert into Friendship (user1_id, user2_id) values ('1', '4')
insert into Friendship (user1_id, user2_id) values ('2', '3')
insert into Friendship (user1_id, user2_id) values ('2', '4')
insert into Friendship (user1_id, user2_id) values ('2', '5')
insert into Friendship (user1_id, user2_id) values ('6', '1')
Truncate table Likes
insert into Likes (user_id, page_id) values ('1', '88')
insert into Likes (user_id, page_id) values ('2', '23')
insert into Likes (user_id, page_id) values ('3', '24')
insert into Likes (user_id, page_id) values ('4', '56')
insert into Likes (user_id, page_id) values ('5', '11')
insert into Likes (user_id, page_id) values ('6', '33')
insert into Likes (user_id, page_id) values ('2', '77')
insert into Likes (user_id, page_id) values ('3', '77')
insert into Likes (user_id, page_id) values ('6', '88')

四、题目解答

1、思路讲解

题目表面很简单,先找到用户为1的朋友,然后再连接Likes表去输出
但是有两个难点
第一是怎么样从Friedship中选取出用户1的朋友,考虑使用case when,但是会有null值,没事,使用join连接时候null值就不存在了

select 
case when user1_id=1 then user2_id
     when user2_id=1 then user1_id
     end 
as user_id
from Friendship
user_id
2
3
4
null
null
null
6

第二是要去掉用户1喜欢的页面,这个很关键,数据过滤你要仔细想好应该什么时候过滤,同时也要注意!!,不能直接使用 <>或者是!=,因为用户1可能喜欢的不止一个页面,需要使用not in,最终代码实现如下

2、代码实现

select distinct page_id as recommended_page from (select 
case when user1_id=1 then user2_id
     when user2_id=1 then user1_id
     end 
as user_id
from Friendship )f 
join Likes 
on f.user_id=Likes.user_id
where page_id not in (select page_id from Likes where user_id=1)    
recommended_page
23
24
56
33
77

五、知识总结

①case when如果不写else,那么其他情况默认输出为null
②数据过滤需要考虑清楚情况,数据过滤的顺序和sql执行的顺序一定要明确,同时要确定数据的过滤条件,如果有多组的话,要使用in或者not in

标签:insert,into,Likes,page,力扣,user,1264,id,页面
From: https://blog.csdn.net/m0_45220893/article/details/143187168

相关文章

  • 学习笔记(四):页面和自定义组件生命周期
    页面和组件的定义:自定义组件:@Component装饰的UI单元,可以组合多个系统组件实现UI的复用,可以调用组件的生命周期。页面:即应用的UI页面。可以由一个或者多个自定义组件组成,@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。只有被@Entry装饰的......
  • 构建更加丰富的页面 习题答案<HarmonyOS第一课>
    一、判断题1. Tabs组件可以通过接口传入一个TabsController,该TabsController可以控制Tabs组件进行页签切换。正确(True)错误(False)正确(True)回答正确2. WebviewController提供了变更Web组件显示内容的接口,例如可以使用loadData来加载一个网页链接地址改变Web组件的......
  • 从简单的页面开始<HarmonyOS第一课>
    一、判断题1. Button作为容器使用时可以通过添加子组件实现包含文字、图片等元素的按钮,其类型包括胶囊按钮、圆形按钮、普通按钮。正确(True)错误(False)正确(True)回答正确2. 对于包含文本元素的组件,如:Text、Span、Button、TextInput等,使用fontFamily设置字体时,参数......
  • vue-cli 跳转到页面指定位置
    原文关注公众号,后台里留言可进行提问,可在后台留言向作者提问解答问题!https://mp.weixin.qq.com/s?__biz=Mzg3NTAzMzAxNA==&mid=2247484254&idx=1&sn=361bbb2113be3eeda3802f0a805c5705&chksm=cec6fb87f9b1729174e3ae66bf9693207386256c964499c098fb8a6cc14b4ba266bc271073a3&tok......
  • 手机端H5页面适配PC端
    手机端H5页面适配PC端@mediaonlyscreenand(min-width:500px){page{width:375px;margin:0auto;/*解决元素position为fixed时,以屏幕视口为容器,从而导致该元素宽度为100%时铺满整个屏幕*/transform:perspective(1px);}}元素po......
  • 页面404超时,nginx配置方案
    只需要更改子域名下的配置文件vhosts.conf 文件,设置php读取超时时间即可fastcgi_read_timeout300;location~\.php(.*)${fastcgi_pass127.0.0.1:9002;fastcgi_indexindex.php;fastcgi_split_path_info^((?U).+\.php)(......
  • HarmonyOS:合理使用页面间转场(2)
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/18499435➤如......
  • chrome 控制台console 调用vue页面的方法--来自chatgpt的回答
    问题二:vue2的项目中chrome控制台输入$0.vue会输出什么在Vue2项目中,如果你在Chrome控制台中输入$0.__vue__,这个命令会返回$0当前选中的DOM元素对应的Vue实例。解释:$0:代表ChromeDevTools中当前选中的DOM元素。.vue:这是Vue2中的一个内部属性,它持有与该D......
  • 记账页面的实现
    在我的JavaWeb项目中,我正在构建一个记账系统。在成功实现用户注册、登录、修改密码和注销账号功能后,我决定增加一个记账页面,以便用户能够方便地记录收入和支出。为此,我首先需要在数据库中创建一个账单表bills,并添加以下字段:type:记账类型(收入或支出)source:收入或支出来源amoun......
  • HarmonyOS:合理使用页面间转场
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......