14. 向用户推荐朋友收藏的商品

news2024/11/15 17:58:59

文章目录

        • 题目需求
        • 思路一:使用 Except
        • 实现一
        • 实现二:使用 Except
        • 思路三:使用 full outer join + where
        • 实现三
        • 实现四:使用 not in + concat
        • 题目来源

题目需求

现请向所有用户推荐其朋友收藏但是用户自己未收藏的商品,请从好友关系表(friendship_info)和收藏表(favor_info)中查询出应向哪位用户推荐哪些商品。

期望结果如下:

user_id (用户id)sku_id (应向该用户推荐的商品id)
1012
1014
1017

需要用到的表:

好友关系表:friendship_info

user1_id(用户1 id)user2_id(用户2 id)
1011010
101108
101106

收藏表:favor_info

user_id(用户id)sku_id(商品id)create_date(收藏日期)
10132021-09-23
101122021-09-23
10162021-09-25

思路一:使用 Except

在这里插入图片描述

实现一

-- 方法一: 感谢网友 (A except B : 返回仅出现在A中的记录。注: except 时两个表的 字段名、字段顺序 要一致)
-- Except学习链接: http://t.csdn.cn/L2LuH

-- 1)用户user1_id 的朋友收藏的商品sku_id
select friendship_info.user1_id as user_id, sku_id
from friendship_info
         join favor_info
              on friendship_info.user2_id = favor_info.user_id
              
    except --取补集(差集)
    
-- 2)自己收藏的商品
select user_id, sku_id
from favor_info;

实现二:使用 Except

-- 方法二: 我的方法, 也是使用的 Except(与 思路一 大致相同)
select distinct user_id,
                sku_id
from (
         -- 1)查询出所有 ‘朋友’ 收藏的 sku_id
         select user1_id user_id,
                user2_id,
                sku_id
         from friendship_info
                  join favor_info on friendship_info.user2_id = favor_info.user_id
             except
              -- 2)查询出所有 ‘我’ 收藏的 sku_id
         select user1_id user_id,
                user2_id,
                sku_id
         from friendship_info
                  join favor_info on friendship_info.user1_id = favor_info.user_id
     ) t1;

思路三:使用 full outer join + where

在这里插入图片描述

实现三

-- 方法三: 我的方法, 不使用 Except

-- 在Hive中,没有直接的 EXCEPT 操作符。但是可以通过其他方式实现类似的功能。例如,可以使用 JOIN 和 WHERE 子句来实现两个表的差集操作。
-- 注: Hive 确实不支持expect函数,但是hive支持expect子句进行语法运算。

select distinct t1.user1_id as user_id,
                t1.sku_id      sku_id
from (
         -- 1)查询出所有 ‘朋友’ 收藏的 sku_id
         select user1_id,
                user2_id,
                sku_id
         from friendship_info
                  left join favor_info on friendship_info.user2_id = favor_info.user_id
     ) t1
         full outer join
     (
         -- 2)查询出所有 ‘我’ 收藏的 sku_id
         select user1_id,
                user2_id,
                sku_id
         from friendship_info
                  left join favor_info on friendship_info.user1_id = favor_info.user_id
     ) t2
     on t1.user1_id = t2.user1_id and t1.user2_id = t2.user2_id and t1.sku_id = t2.sku_id
where t2.user1_id is null;

实现四:使用 not in + concat

-- 方法四: 与 思路一 相似

-- 3) 查询出所有 ‘朋友’ 收藏了 但是 ‘我’ 没有收藏的 sku_id
SELECT t1.user1_id user_id, t2.sku_id
-- 1) 查询出所有 ‘朋友’ 收藏的 sku_id
from friendship_info t1

         JOIN favor_info t2
              on t1.user2_id = t2.user_id

where concat(t1.user1_id, t2.sku_id) not in (
    -- 2)查询出所有 ‘我’ 收藏的 sku_id
    SELECT concat(user_id, sku_id)
    from favor_info
)
-- group by 在此处相当于对 t1.user1_id, t2.sku_id 进行去重
group by t1.user1_id, t2.sku_id;

-- 等价于 使用 distinct

SELECT distinct t1.user1_id user_id, t2.sku_id
from friendship_info t1
         JOIN favor_info t2
              on t1.user2_id = t2.user_id
where concat(t1.user1_id, t2.sku_id) not in (
    SELECT concat(user_id, sku_id)
    from favor_info
);

题目来源

http://practice.atguigu.cn/#/question/14/desc?qType=SQL

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/712307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阻抗计算,真的没有那么难!

问:什么是阻抗? 答:在具有电阻、电感和电容的电路里,对电路中的电流所起的阻碍作用叫做阻抗。 问:什么是阻抗匹配? 答:阻抗匹配是指信号源或者传输线跟负载之间达到一种适合的搭配。阻抗匹配主要有两点作用…

ubuntu git clone 失败

命令行报错如下: gitxxx.xx.com: Permission denied (publickey). fatal: 无法读取远程仓库。修改步骤: 1、.ssh权限配置问题 .ssh 文件夹权限 755 或 700 config 文件权限 644 id_rsa 文件权限 600 id_rsa.pub 文件权限 644 r:read 代表读…

VMware安装Centos7并初始化网络使外部可以访问

本文目录 1:下载镜像2:安装centos7虚拟机2.1:初始化虚拟机2.2 初始化系统2.3 修改虚拟机网络模式 3:配置VMware虚拟网络编辑器4:配置centos网络4.1 修改网络配置文件4.2 刷新网络配置 5 验证网络总结 1:下载镜像 进入…

Web3.0在互联网圈爆红,这个“新一轮”概念有哪些机会?

在互联网行业里,新概念和潮流层出不穷,每一个概念都伴随着一轮火热的讨论和关注。从区块链到元宇宙,互联网的发展一直在不断地推动着新的创新和变革。而如今,Web3.0 成为了最新的热点话题,引起了互联网、科技和金融领域…

vue_前后端分离-增删改操作

增加操作和修改操作: 两个操作放一个页面进行操作 使用插槽(scope.row)的方式获取列表中的每一行数据 <template slot-scope"scope"><el-buttonsize"mini"click"openEditDialog( scope.row)">编辑</el-button>在进行添加的…

迅为RK3568开发板Buildroot 系统自启动 QT 程序

本小节将讲解如何开机自启动 QT 程序。 在设置自启动 QT 程序之前&#xff0c;首先要编译好 QT 可执行程序&#xff0c;完成以下两步。 1、 已经根据 03_【北京迅为】itop-3568 开发板快速使用编译环境 ubuntu18.04 v1.0.doc 第 10 章节进行了 QT 程序的交叉编译 2、 将交叉…

华为OD机试真题B卷 Python 实现【内存资源分配】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Python算法源码六、效果展示1、输入2、输出 3、说明4、如果改一下呢&#xff1f; 一、题目描述 有一个简易内存池&#xff0c;内存按照大小粒度分类&#xff0c;每个粒度有若干个可用内存资源&#xff0c;用户会进行…

django 使用channels 搭建websocket聊天程序

channels官方文档&#xff1a;Django Channels — Channels 4.0.0 documentation 效果如下&#xff1a; 主要实现功能 基于Django的认证的群聊 具体实现 当建立websocket的时候&#xff0c;建立之前是http消息&#xff0c;我们可以拿到http消息里面的cookie等信息进行认证&…

数字经济时代,高校该如何建设大数据实验实训室,培养高质量数智人才?

数智人才作为数字经济时代发展的重要支撑资源&#xff0c;人才质量、存量与储备量之争&#xff0c;成为综合国力和区位竞争的重要内容&#xff0c;而大数据与人工智能技术作为数字经济的主要驱动力&#xff0c;相关人才的培养尤其重要。教育部自2016年起&#xff0c;陆续批准设…

Maven中 排除依赖 exclusions

使用maven进行jar包依赖管理时&#xff0c;maven会自行管理jar包及其依赖链条&#xff0c;但往往会遇到依赖冲突问题&#xff0c;这时候就可以尝试使用exclusions来进行依赖管理 demo:排除tomcat 启用 jetty <dependency><groupId>org.springframework.boot</g…

map父子维护的ebom父子部件关系计算组套数量

map父子维护的ebom父子部件关系计算组套数量 使用ebom时候&#xff0c;把部件父子关系和安装数量维护在了map上面&#xff0c;要计算组套数量&#xff0c;需要递归从当前往上取出父级安装数量相乘&#xff0c;一直取到最顶层。 G的组套数量&#xff1a;GDB32212 E的组套数量&a…

如何提高应用的用户留存

用户的留存率是我们应用内最重要的指标之一&#xff0c;是指有多少人在一段时间后还在使用该应用&#xff0c;它定义了我们的受众规模&#xff0c;让我们知道应用是否有增长的能力。 提高应用保留率的策略&#xff1a;1&#xff0c;推送通知&#xff0c;在适当的时候发送推送通…

计算机网络速成

更好的阅读体验 \color{red}{\huge{更好的阅读体验}} 更好的阅读体验 因特网概述 网络、互联网和因特网 网络&#xff1a;将多个计算机或计算机网络通过通信线路连接起来&#xff0c;使得它们可以相互通信和交换信息的系统。由若干节点&#xff08;Node&#xff09;和连接这些…

LInux:生成崩溃程序的core文件

core文件是linux系统下一种记录软件异常的机制&#xff0c;在进程运行崩溃时&#xff0c;系统会将coredump信息写入core文件。 这样就方便我们定位软件问题。 1. 设置core文件大小 使用ulimit -c可以查看当前core文件的大小 默认情况下&#xff0c;core文件的大小为0&#xf…

chatgpt赋能python:Python开发的SEO应用

Python开发的SEO应用 搜索引擎优化&#xff08;SEO&#xff09;已经成为每个网站所有者需要考虑的重要因素之一。随着搜索引擎算法的不断变化和演进&#xff0c;我们需要确保我们的网站能在各种搜索引擎中进行良好的排名。Python作为一门强大的编程语言&#xff0c;已经被广泛…

Databend v1.2 版本发布!Data + AI

各位社区小伙伴们&#xff0c;Databend 于 2023 年 6 月 29 日迎来了 v1.2.0 版本的正式发布&#xff01;相较于 v1.1.0 版本&#xff0c;开发者们一共新增了 600 次 commit&#xff0c;涉及 3083 个文件变更&#xff0c;约 17 万 行代码修改。感谢各位社区伙伴的参与&#xff…

跨境电商如何快速提升产品排名和转化率,打造爆款产品

中小卖家在跨境电商平台上经营时&#xff0c;经常会遇到提升销售瓶颈的问题。今天陈哥将分享一个快速打造爆款的方法&#xff0c;除了SEO优化&#xff08;关键词分析、优化标题、图片、产品描述和定价&#xff09;等方面的策略。同时&#xff0c;测评也是一个有效的手段&#x…

规则引擎是什么,常见的应用领域,你知道吗?

规则引擎是什么 规则引擎&#xff0c;规则引擎是企业数字化转型升级过程中非常必要的软件工具&#xff0c;是一种能够自动执行一定条件下的预设逻辑的技术&#xff0c;可以帮助企业在收到数据或事件时自动触发相关业务规则&#xff0c;其主要优势如下&#xff1a; 易于维护与…

2023年华中杯数学建模C题空气质量预测与预警解题全过程文档及程序

2023年华中杯数学建模 C题 空气质量预测与预警 原题再现 空气污染对人类健康、生态环境、社会经济造成危害&#xff0c;其污染水平受诸多因素的影响&#xff0c;如 PM2.5、PM10、CO、气温、风速、降水量等&#xff0c;探究 PM2.5 等污染物浓度的因素&#xff0c;更精准的预测…

山西电力市场日前价格预测【2023-07-04】

日前价格预测 预测明日&#xff08;2023-07-04&#xff09;山西电力市场全天平均日前电价为136.03元/MWh。其中&#xff0c;最高日前电价为280.29元/MWh&#xff0c;预计出现在00:15。最低日前电价为0.00元/MWh&#xff0c;预计出现在09:15-18:15。 以上预测仅供学习参考&…