当前位置: 首页 > news >正文

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

数据准备

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 的朋友

提供两种方法 

第一种union 

select user2_idfrom Friendshipwhere user1_id = 1unionselect user1_idfrom Friendshipwhere user2_id = 1

第二种case when

select casewhen user1_id = 1 then user2_idwhen user2_id = 1 then user1_id end friends
from Friendship

② 查询Likes表 条件user_id要在第①问所得出的表种 同时 还不能包括自己(user_id=1)的

select distinct page_id
from Likes
where user_id in (select user2_idfrom Friendshipwhere user1_id = 1unionselect user1_idfrom Friendshipwhere user2_id = 1)and page_id not in (select page_id from Likes where user_id = 1

代码

# 法一
select distinct page_id
from Likes
where user_id in (select user2_idfrom Friendshipwhere user1_id = 1unionselect user1_idfrom Friendshipwhere user2_id = 1)and page_id not in (select page_id from Likes where user_id = 1);#法二
select distinct page_id
from Likes
where user_id in (select casewhen user1_id = 1 then user2_idwhen user2_id = 1 then user1_id end friendsfrom Friendship)and page_id not in (select page_id from Likes where user_id = 1);

总结

case when 的用法 很奇妙 可以积累一下

遇到涉及到两列的数据 可以考虑使用union  和 case  when

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ROS学习笔记13——rosbag功能包的简单使用
  • 【自动化测试】常见的自动化遍历工具以及如何选择合适的自动化遍历工具
  • 1、vectorCast单元测试常用操作
  • 关于 OceanBase 4.x 中被truncate的 table 不再支持进回收站的原因
  • CSS——网格布局(display: grid)之上篇
  • 链路聚合(Link Aggregation)
  • vue 入门一
  • 【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第二篇-着色器制作】
  • JS实现树形结构数据中特定节点及其子节点显示属性设置的技巧(可用于树形节点过滤筛选)
  • jQuery 简介 ③ ready()事件函数、jQuery 二个原则及容错机制
  • 关系型数据库,NoSQL和内存数据库三种数据库的比较
  • nvm node管理工具常用指令
  • 大数据时代的等保测评:数据安全与隐私保护
  • 数据结构(Day14)
  • k8s自动清理pod脚本分享
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【5+】跨webview多页面 触发事件(二)
  • download使用浅析
  • ECMAScript6(0):ES6简明参考手册
  • idea + plantuml 画流程图
  • Idea+maven+scala构建包并在spark on yarn 运行
  • java8 Stream Pipelines 浅析
  • JS笔记四:作用域、变量(函数)提升
  • js面向对象
  • Linux Process Manage
  • Meteor的表单提交:Form
  • mysql 5.6 原生Online DDL解析
  • python 学习笔记 - Queue Pipes,进程间通讯
  • React 快速上手 - 07 前端路由 react-router
  • spring学习第二天
  • 翻译--Thinking in React
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 关于使用markdown的方法(引自CSDN教程)
  • 利用jquery编写加法运算验证码
  • 如何设计一个微型分布式架构?
  • 如何胜任知名企业的商业数据分析师?
  • 使用权重正则化较少模型过拟合
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 微信小程序实战练习(仿五洲到家微信版)
  • 线性表及其算法(java实现)
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • elasticsearch-head插件安装
  • 湖北分布式智能数据采集方法有哪些?
  • ​香农与信息论三大定律
  • #laravel 通过手动安装依赖PHPExcel#
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (Python第六天)文件处理
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (不用互三)AI绘画工具应该如何选择
  • (差分)胡桃爱原石
  • (排序详解之 堆排序)
  • (强烈推荐)移动端音视频从零到上手(下)
  • (三)docker:Dockerfile构建容器运行jar包
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (十六)Flask之蓝图