首页 > 其他分享 >1264. 页面推荐#奇怪,非常奇怪,谁能解决这个问题!!!!!!!!!!!!!!!!!!!!!!!

1264. 页面推荐#奇怪,非常奇怪,谁能解决这个问题!!!!!!!!!!!!!!!!!!!!!!!

时间:2024-10-31 21:46:01浏览次数:3  
标签:user2 user1 page 奇怪 Likes user 1264 id 页面

目录

题目链接

题目:链接!!!

题目和要求

朋友关系列表: 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 已经喜欢了它。

问题

我先提出问题,您往下面看,就知道奇怪了
问题:把数据换成 测试用例后,子查询改为cte表达式结果就不对了,以及改为cte表达式后去掉where条件结果又对了


1

这是一周以前我发现了,事情是这样的一开始我是用的if( , , if( , , null))cet表达式写的

with a1 as (
select 
	if(user1_id=1,user2_id,if(user2_id=1,user1_id,null)) as id 
from Friendship
	where user1_id=1 or user2_id=1)
	-- 上面是cte表达式
select distinct page_id recommended_page
from Likes
where user_id in (select id from a1) and page_id not in (select page_id from Likes where user_id=1);

结果错误:
在这里插入图片描述

2

然后我反思以为是if( , , if( , , null))null导致的错误了,然后我就换成case when

#with a1 as (
select 
	if(user1_id=1,user2_id,if(user2_id=1,user1_id,null)) as id 
from Friendship
	where user1_id=1 or user2_id=1)
	
	-- 上面是cte表达式
#select distinct page_id recommended_page
#from Likes
#where user_id in (select id from a1) and page_id not in (select page_id from #Likes where user_id=1);
#####################################################
with a1 as ( 
select CASE 
WHEN user1_id = 1 then user2_id
WHEN user2_id = 1 then user1_id END AS id 
-- 我把if( , , if( , , null))改为cet表达式
from Friendship where user1_id=1 or user2_id=1)

-- 上面是cte表达式
SELECT distinct page_id as recommended_page
from Likes
where user_id in
-- !!!!!!!!!!!
(   select id from a1   )
-- !!!!!!!!!!!!!!!
and page_id not in (select page_id from Likes where user_id=1);

3

结果还是没通过
在这里插入图片描述

4当时我人就麻了,因为我非常相信我的思路没有问题

当时我人就麻了,因为我非常相信我的思路没有问题然后我直接看官方的答案
在这里插入图片描述

5

运行一下官方的竟然能通过(当时我就产生了疑问为什么官方不用CTE了,这样板书不是更直观,更好看吗)
在这里插入图片描述

6 然后我就开始怀疑是力扣解释器的问题

我就把没通过的测试用例,导入dataGrip 2024.2.2 软件中进行操作

drop table Friendship;
drop table Likes;
Create table If Not Exists Friendship (user1_id int, user2_id int);
Create table If Not Exists Likes (user_id int, page_id int);
-- 插入 Friendship 表的数据
INSERT INTO Friendship (user1_id, user2_id) VALUES
(1, 2),
(2, 4),
(2, 5),
(3, 4),
(3, 6);
-- 插入 Likes 表的数据
INSERT INTO Likes (user_id, page_id) VALUES
(2, 19),
(2, 11),
(2, 10),
(3, 14),
(3, 10),
(3, 13),
(3, 11),
(4, 12),
(4, 10),
(4, 18),
(4, 19),
(5, 16),
(5, 19),
(5, 18),
(6, 14);

在这里插入图片描述

7 发现都可能没有问题

输出后发现
在这里插入图片描述

8

然后我就折腾一下,发现 去掉where结果又一样了
在这里插入图片描述

9

问了一下老师,老师也说很奇怪!
在这里插入图片描述

10

你不信可以点开下面题目的链接, 去把官方的方法2答案 改为CTE表达式,结果就是通过不了测试示例

题目链接

题目:链接!!!

标签:user2,user1,page,奇怪,Likes,user,1264,id,页面
From: https://blog.csdn.net/weixin_74002941/article/details/143414971

相关文章

  • mse~路由实现某个页面的灰度功能
    起因我有个网站A【蓝色服务】,要对网站A进行改版【绿色服务】,其中用户中心已经改完了,希望当用户访问时,如果http请求头中包含isGroup,并且isGroup=1时,去新的绿色服务,反之就还是去蓝色服务。前提蓝绿服务,域名是同一个,如lind.gray.com蓝绿服务,各个页面的URL是同一个用户测在访问U......
  • vue2之页面生成PDF导出并适应A4页面
    一、技术vue2 、 elementUI、html2canvas  、jsPDF二、技术官网vue2:https://cn.vuejs.org/elementUi:https://element.eleme.cn/#/zh-CNhtml2canvas:https://html2canvas.hertzen.com/jsPDF:https://www.npmjs.com/package/jspdf三、优缺点优......
  • uniapp - 详细实现移动端公众号 H5 网页授权登录流程及示例代码,申请测试公众号全流程
    前言Vue版本,请访问这篇文章。在uni-appH5网站平台开发中,详解微信公众号网页接入微信授权登录示例代码,附带申请测试公众号全流程及配置教程,提供前端h5页面公众号网页实现授权登陆并获取用户昵称头像数据的示例源码,用自己项目跑出来的本地局域网IP段就可以拉起公众......
  • webMagic静态页面的爬取
     一:javamaven依赖:<dependency><groupId>us.codecraft</groupId><artifactId>webmagic-core</artifactId><version>0.7.4</version></dependency><dependency><groupId>us.codecraft</grou......
  • WebMagic动态页面爬取
    动态页面爬虫前的准备:https://www.cnblogs.com/maohuidong/p/18517953一:javamaven添加依赖:<dependency><groupId>us.codecraft</groupId><artifactId>webmagic-core</artifactId><version>0.7.4</version></dependency>&......
  • 界面控件Kendo UI for Angular 2024 Q3亮点 - 全新的页面模板
    随着最新的2024Q3版本,Progress使用户能够使用现成的页面模板和构建块更快地构建令人惊叹的应用程序,使您的Telerik和KendoUI开发体验更好。Telerik和KendoUI 2024Q3版本将焦点放在新推出的页面模板和构建块上,每个页面模板和构建块都预先配置了TelerikUIforBlazor、KendoU......
  • edge浏览器如何打开不安全页面的禁止权限?
    第一步解决edge浏览器中站点不安全问题的方法1、首先,我们点击打开edge浏览器,然后将我们的浏览器右上角的【…】图标点击打开。2、这时,我们在打开的窗口中,将【设置】选项进行点击一下。3、随后进入到设置页面中,我们将左侧的【cookie和网站权限】选项进行左键点击一下。4、这......
  • 『玩转Streamlit』--页面布局
    一个优秀的数据应用不仅仅是功能的强大,更在于其用户体验的打造。而良好的页面布局,作为用户体验的重要组成部分,不仅能够提升信息的可读性,还能引导用户高效地完成操作。反之,混乱的布局会让人感到困惑和挫败,甚至导致用户放弃使用应用。在Streamlit中,Sidebar(侧边栏)、Columns(列布局)......
  • 访问网站404页面时出现301报错
    主机上设置了404错误页面,但在访问网页时,却出现了301报错。这是因为主机域名开启了强制HTTPS加密访问功能,导致服务器在处理HTTP请求时,先返回301状态码并自动跳转到HTTPS请求,然后再去请求404错误页面资源,从而导致301报错。可能原因强制HTTPS加密访问功能:当您对网站服务器发出一个......
  • html网页制作在线电影网页设计-html电影资讯博客网站模板(5个页面)
    html网页制作在线电影网页设计-html电影资讯博客网站模板(5个页面)一款黑色响应式的电影新闻资讯(首页/电影/明星/热点/新闻)等页面,电影热点资讯,电影博客类型网页模板html,html网站期末作品~电影资讯博客网站模板(HTML+CSS+JavaScript)涵盖个人、电影、美食、动漫、公司、......