题目:

编写一段 SQL 来查找:在被报告为垃圾广告的帖子中,被移除的帖子的每日平均占比,四舍五入到小数点后 2 位。

Actions 表:

Removals 表:

Result 表:

2019-07-04 的垃圾广告移除率是 50%,因为有两张帖子被报告为垃圾广告,但只有一个得到移除。
2019-07-02 的垃圾广告移除率是 100%,因为有一张帖子被举报为垃圾广告并得到移除。
其余几天没有收到垃圾广告的举报,因此平均值为:(50 + 100) / 2 = 75%
注意,输出仅需要一个平均值即可,我们并不关注移除操作的日期。

建表语句:

 1 Create table If Not Exists actions_1132 (
2 user_id int,
3 post_id int,
4 action_date date,
5 action enum('view', 'like', 'reaction', 'comment', 'report', 'share'),
6 extra varchar(6)
7 );
8 Create table If Not Exists removals_1132 (
9 post_id int,
10 remove_date date
11 );
12 Truncate table actions_1132;
13 insert into actions_1132 (user_id, post_id, action_date, action, extra) values
14 ('1', '1', '2019-07-01','view',null),
15 ('1', '1', '2019-07-01','like',null),
16 ('1', '1', '2019-07-01','share',null),
17 ('2', '2', '2019-07-04','view',null),
18 ('2', '2', '2019-07-04','report','spam'),
19 ('3', '4', '2019-07-04','view',null),
20 ('3', '4', '2019-07-04','report','spam'),
21 ('4', '3', '2019-07-02','view',null),
22 ('4', '3', '2019-07-02','report','spam'),
23 ('5', '2', '2019-07-03','view',null),
24 ('5', '2', '2019-07-03','report','racism'),
25 ('5', '5', '2019-07-03','view',null),
26 ('5', '5', '2019-07-03','report','racism');
27 Truncate table removals_1132;
28 insert into removals_1132 (post_id, remove_date) values ('2', '2019-07-20'),( '3', '2019-07-18');

解题思路:

①先筛选出actions表中被报道为垃圾信息即extra = 'spam'的数据;

1 select post_id, action_date
2 from actions_1132
3 where extra = 'spam'

②将第一步查询出来的表通过post_id与 removals左连接;

1 select *
2 from (
3 select post_id, action_date
4 from actions_1132
5 where extra = 'spam'
6 ) as a
7 left join removals_1132 b
8 on a.post_id = b.post_id

③然后再根据第二步查询出的临时表,以action_date为分组,统计出删除比率;

1   select action_date,count(distinct b.post_id) / count(distinct a.post_id) as rate
2 from (
3 select post_id, action_date
4 from actions_1132
5 where extra = 'spam'
6 ) as a
7 left join removals_1132 b
8 on a.post_id = b.post_id
9 group by action_date

④最后根据上一步的临时表,计算出被移除的帖子的每日平均占比;

 1 select round(sum(rate)/ count(*)*100, 2) as average_daily_percent
2 from (
3 select action_date,count(distinct b.post_id) / count(distinct a.post_id) as rate
4 from (
5 select post_id, action_date
6 from actions_1132
7 where extra = 'spam'
8 ) as a
9 left join removals_1132 b
10 on a.post_id = b.post_id
11 group by action_date
12 ) as temp

力扣1132(MySQL)-报告的记录Ⅱ(中等)的更多相关文章

  1. 力扣1689. 十-二进制数的最少数目-C语言实现-中等难度题

    题目 传送门 如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 .例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是 ...

  2. 力扣1438. 绝对差不超过限制的最长连续子数组-C语言实现-中等难度

    题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条 ...

  3. 力扣1052. 爱生气的书店老板-C语言实现-中等难度

    题目 传送门 文本 今天,书店老板有一家店打算试营业 customers.length 分钟.每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开. 在某些时 ...

  4. 力扣---511. 游戏玩法分析 I

    活动表 Activity: +--------------+---------+| Column Name  | Type    |+--------------+---------+| player ...

  5. LeetCode 1244. 力扣排行榜

    地址 https://www.acwing.com/solution/LeetCode/content/5765/ 题目描述新一轮的「力扣杯」编程大赛即将启动,为了动态显示参赛者的得分数据,需要设计一 ...

  6. 力扣Leetcode 45. 跳跃游戏 II - 贪心思想

    这题是 55.跳跃游戏的升级版 力扣Leetcode 55. 跳跃游戏 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃 ...

  7. 【力扣】82. 删除排序链表中的重复元素 II

    存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字. 返回同样按升序排列的结果链表. 示例 1: 输入:hea ...

  8. 力扣---1148. 文章浏览 I

    Views 表:+---------------+---------+| Column Name   | Type    |+---------------+---------+| article_i ...

  9. MySQL高效获取记录总数

    通常mysql获取查询记录总数我们使用如下语句: SELECT COUNT(*) FROM users WHERE k='avs';  或:SELECT id FROM goods WHERE k=' ...

  10. CentOS7.4安装MySQL踩坑记录

    CentOS7.4安装MySQL踩坑记录 time: 2018.3.19 CentOS7.4安装MySQL时网上的文档虽然多但是不靠谱的也多, 可能因为版本与时间的问题, 所以记录下自己踩坑的过程, ...

随机推荐

  1. InputNumberZen.vue 数字输入 支持两位小数

    <template> <span style="width: 200px; display: inline-block;"> <Input v-mod ...

  2. linux下查看端口对应的进程号

    在部署服务的时候,会指定对应的端口号,如果想kill 对应的端口,就要找到对应的进程,查看端口对应的进程号,有两种方法: 1.lsof命令,查看系统打开的文件(在linux中,所有的都是文件),需要管 ...

  3. electron 下网页获取 micphone 权限

    网页获取麦克风或摄像头权限我们只需调用 navigator.mediaDevices.getUserMedia 方法就可唤起浏览器用户授权 const useMicphone = async () = ...

  4. Ubuntu 14.04 升级到Gnome3.12z的折腾之旅(警示后来者)+推荐Extensions.-------(一)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文发布于 2014-12-19 22:40:20 ...

  5. 记录--盘点 TypeScript 那些奇怪的符号

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 TypeScript是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和 ...

  6. 记录--Threejs-着色器实现一个水波纹

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 hree.js 是一个基于 WebGL 的 JavaScript 3D 库,用于创建和渲染 3D 图形场景. 一. 图像渲染过程 1.we ...

  7. 记录--uni-app在不同平台下拨打电话

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 场景 在App中拨打电话是一个比较常见的应用场景,但是我们通过搜索文章,发现,大部分的博文都是uni-app官网的copy, copy u ...

  8. 优化Mysql配置调整内存

    1.查看Mysql版本 # mysql -V 示例: [root@root /]# mysql -V mysql Ver 14.14 Distrib 5.7.44, for Linux (x86_64 ...

  9. 大模型时代的PDF解析工具

    去年(2023年)是大模型爆发元年.但是大模型具有两个缺点:缺失私有领域知识和幻觉.缺失私有领域知识是指大模型训练时并没有企业私有数据/知识,所以无法正确回答相关问题.并且在这种情况下,大模型会一本正 ...

  10. drools中使用function

    一.背景 当我们在drools中编写规则时,有些时候存在重复的代码,那么我们是否可以将这些重复代码抽取出来,封装成一个function来调用呢?那么在drools中如何自定义function? 二.需 ...