【数据分析面试】27. 计算广告评论比例 (SQL)

在这里插入图片描述

题目: 计算广告评论比例

假设你有一个ads表,包含ID和广告名称,比如“劳动节衬衫促销”。feed_comments表保存了不同用户在常规信息流中对广告的评论。moments_comments表保存了不同用户在moments中对广告的评论。

编写一个查询,获取广告在feed和moments中的评论比例。
示例:
输入:

feed_comments

列名类型
ad_id整数
user_id整数
comment_id整数

moments_comments

列名类型
ad_id整数
user_id整数
comment_id整数

ads

列名类型
id整数
nameVARCHAR

输出:

名称feed评论比例moments评论比例
劳动节.6.4
Polo衬衫.85.15

答案

对于每个广告,我们想要的是来自feed和moments的评论比例:

% feeds = feed的评论数 / (feed的评论数 + moments的评论数)
% moments = moments的评论数 / (feed的评论数 + moments的评论数)

先看看feed_comments表。想要求每个ad_id的总评论数,我们可以简单地使用GROUP BY来计数。

SELECT ad_id, COUNT(DISTINCT comment_id) AS num_comments
FROM feed_comments AS fc 
GROUP BY 1

这里还需要注意到一个细节:如果一个广告在feed_comments表中不存在,但存在于ads表或moments_comments表中,上面的方法就会将该广告过滤掉,使其评论计数为零。

我们可以通过将表左连接到来解决这个问题,同样moments_comments表也需要执行相同的操作。

WITH fc AS (SELECT ads.id AS ad_id, COUNT(DISTINCT comment_id) AS num_commentsFROM adsLEFT JOIN feed_comments AS fc ON ads.id = fc.ad_idGROUP BY 1
),
mc AS (SELECT ads.id AS ad_id, COUNT(DISTINCT comment_id) AS num_commentsFROM adsLEFT JOIN moments_comments AS mc ON ads.id = mc.ad_idGROUP BY 1
)
SELECT * FROM fc,mc

现在给定这两个计数,我们可以将它们与广告表连接起来,获取每个广告的名称,并计算总比例的方程式。

WITH fc AS (SELECT ads.id AS ad_id, COUNT(DISTINCT comment_id) AS num_commentsFROM adsLEFT JOIN feed_comments AS fc ON ads.id = fc.ad_idGROUP BY 1
),
mc AS (SELECT ads.id AS ad_id, COUNT(DISTINCT comment_id) AS num_commentsFROM adsLEFT JOIN moments_comments AS mc ON ads.id = mc.ad_idGROUP BY 1
)
SELECT ads.name, fc.num_comments/(fc.num_comments + mc.num_comments) AS percentage_feed, mc.num_comments/(fc.num_comments + mc.num_comments) AS percentage_moments
FROM ads
LEFT JOIN fc ON ads.id = fc.ad_id 
LEFT JOIN mc ON ads.id = mc.ad_id

更多详细答案可关注公众号查阅。
在这里插入图片描述

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

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

相关文章

问题总结笔记

1.向量旋转 问题: 将一个向量旋转90 方法:旋转矩阵 FVector FrontDir EndMousePoint - Point; FrontDir.Normalize(); FVector Left FVector(-FrontDir.Y, FrontDir.X, 0); Verties.Add(Point Left * (WallWedith / 2)); Verties.Add(FVector(Vertie…

BFS 专题 ——FloodFill算法:733.图像渲染

文章目录 前言FloodFill算法简介题目描述算法原理代码实现——BFSCJava 前言 大家好啊,今天就正式开始我们的BFS专题了,觉得有用的朋友给个三连呗。 FloodFill算法简介 中文:洪水灌溉 举个例子,正数为凸起的山峰,负…

攻防世界---misc---easycap

1.下载附件是一个流量包,拿到wireshark中分析 2.查看分级协议 3.过滤data 4.追踪tcp流 5.得到flag

python-基础(5)-字典

python专栏地址 上一篇: python-基础(4)-list 字典 本节主要介绍 字典初始字典的操作 一、字典简单了解 所谓字典,就像我们常用的字典一样,输入一个页码,就到达一页。它有两种方式创建: 直接写name{}namedict() gufeng {&quo…

OpenCV与AI深度学习 | OpenCV如何读取仪表中的指针刻度

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。 原文链接:OpenCV如何读取仪表中的指针刻度 最近遇到一个问题,如何读取仪表中的指针指向的刻度。 解决方法有多种,比如&#xff…

JAVA 基础知识总结

进制转换 十进制转十六进制:Integer.toHexString(int i) 十进制转八进制:Integer.toOctalString(int i) 十进制转二进制:Integer.toBinaryString(int i) 十六进制转十进制:Integer.valueOf("FFFF",16).toString() 八进…

Linux使用Docker部署DashDot访问本地服务器面板

文章目录 1. 本地环境检查1.1 安装docker1.2 下载Dashdot镜像 2. 部署DashDot应用 本篇文章我们将使用Docker在本地部署DashDot服务器仪表盘,并且结合cpolar内网穿透工具可以实现公网实时监测服务器系统、处理器、内存、存储、网络、显卡等,并且拥有API接…

【C++】双指针算法:复写零

1.题目 别看这是一道简单题,它的通过率低于一些中等甚至困难的题目! 大大增加这道题目难度的是最后一句话:1.不可越界写入。2.就地修改。 如果可以再创建一个数组的话,那么这道题目就会非常简单,但这道题目必须要求在…

Linux的学习之路:18、进程间通信(2)

摘要 本章主要是说一下命名管道和共享内存 目录 摘要 一、命名管道 1、创建一个命名管道 2、匿名管道与命名管道的区别 3、命名管道的打开规则 4、代码实现 二、system V共享内存 1、共享内存 2、共享内存函数 三、代码 四、思维导图 一、命名管道 1、创建一个命…

13.Nacos简介,下载,安装,启动-windows

Nacos是阿里巴巴的产品,现在是SpringCloud的一个组件。 相比Eureka功能更加丰富,服务注册与发现和分布式配置。 Nacos下载地址: https://github.com/alibaba/nacos windows下载nacos-server-1.4.1.zip文件 nacos是基于java语言实现的&…

【系统架构师】-案例考点(三)

1、信息系统架构ISA设计 四种架构模型: 1)单机应用 2)客户机/服务器模式:两层、三层C/S、B/S模型、MVC模式等 3)面向服务架构SOA 4)企业数据交换总线:不同企业应用之间通过信息交换的公共频…

2024-04-21 问AI: 介绍一下花卉数据集Oxford 102 flowers

文心一言 Oxford 102 flowers数据集是一个由牛津大学工程科学系于2008年发布的花卉图像分类数据集。该数据集主要用于图像分类任务,并涵盖了英国常见的102种花卉,每种花卉由40到258张图像组成。这些图像涵盖了较大的比例、姿势和光线变化,使…

opengauss pending启动转主备代码分析

opengauss以pending启动时,也会执行StartupXLOG,并且replay wal,ApplyRedoRecord()会被调用。 当对pending状态的gaussdb,执行gs_ctl notify -M primary 时,会启动walsender等线程。 gs_ctl与gaussdb之间的交互不是通…

一招下载transformers真不用网上那些教程(我试了1*mol多次才知道)

pip很多是2 然而!!!!!!!!!!!!!!!!!!!!…

element中file-upload组件的提示‘按delete键可删除’,怎么去掉

问题描述 element中file-upload组件会出现这种提示‘按delete键可删除’ 解决方案: 这是因为使用file-upload组件时自带的提示会盖住上传的文件名,修改一下自带的样式即可 ::v-deep .el-upload-list__item.is-success.focusing .el-icon-close-tip {d…

洛谷 -P1007 独木桥(模拟,思维)

独木桥 题目背景 战争已经进入到紧要时间。你是运输小队长,正在率领运输部队向前线运送物资。运输任务像做题一样的无聊。你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们。士兵们十分愤怒&#xf…

angular17 打包项目放在了多出了个browser目录

修改package.json配置文件,把 "builder": "angular-devkit/build-angular:application", 改成"builder": "angular-devkit/build-angular:browser", 把"browser": "src/main.ts",改成"main&qu…

排队分红,你想象不到的电商新玩法

亲爱的朋友们,我是微三云的周丽,一名专注于私域电商模式创新的探索者。 随着互联网的迅猛发展,电商行业的商业模式也在不断演变。最近,一种全新的消费返利模式——排队分红模式,成为了业界瞩目的焦点。这一模式结合了…

组合模式【结构型模式C++】

1.概述 组合模式又叫部分整体模式属于结构型模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。 2.结构 组件(Component):定义了组合中所有对象的通用接口&#xff0c…

three.js(3):添加three. js坐标轴、光源和阴影效果

1 实现步骤 要实现阴影效果同样需要几个重要的概念。 我们首先研究一下日常生活中是如何产生阴影效果的。 需要有光。需要一个物体,比如苹果、狗等。需要一个接受投影的元素,比如地面、桌面等。 在 Three.js 中要产生阴影效果其实和现实世界的原理差…