题目:

编写一段 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. 代码片段管理软件 - 发现 utools 这个工具还行 windows软件

    代码片段管理软件 - 发现 utools 这个工具还行 windows软件 介绍 这个软件不是专业的代码片段工具 好在还能凑合用 最完美的还是苹果那个软件,但是用的win没办法了 这个可以粘贴到vsc ...

  2. Dreamweaver基础教程:学习JavaScript

    目录 简介 用法 输出 语法 字面量 变量 操作符 语句 关键字 注释 数据类型 函数 函数表达式 Function() 构造函数 自调用函数 箭头函数 arguments 对象 使用构造函数调用函数 ...

  3. day03-2-应用线程02

    JavaGUI-坦克大战03-2 7.线程的应用02 7.3.坦克大战4.0版 坦克大战4.0版 增加功能: 功能1.让敌人的坦克也能够发射子弹(可以有多个子弹) 功能2.当我方坦克集中敌人坦克时,敌 ...

  4. Ubuntu 的源相关介绍(最近在配gstreamer的时候,紧急补充的知识)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  5. 记录--实时音视频功能简析(live-pusher与live-player)

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 使用须知 2017年下半年,微信6.5.21版本支持在线音视频功能.开发者可以通过两个音视频组件 和 实现实时地在线直播.视频通话.语音通 ...

  6. GIT版本控制学习博客

    GIT版本控制学习博客 环境部署 下载git版本控制即可. 用户配置 (1)设置用户及地址 git config --global user.name "Username" git ...

  7. 鸿蒙HarmonyOS实战-ArkUI组件(Grid/GridItem)

    一.Grid/GridItem 1.概述 网格布局是一种新型的布局方式,它按照网格来划分页面,通过列和行来定义网格,使得页面的布局更加灵活.简洁.易于维护.网格布局能够将页面分成多个单元格,可以在这些 ...

  8. 插入排序【Java]

    1 package class01; 2 3 import java.util.Arrays; 4 5 public class Code03_InsertionSort { 6 7 public s ...

  9. Python爬虫爬取爱奇艺、腾讯视频电影相关信息(改进版)---团队第一阶段冲刺

    爱奇艺 1 import time 2 import traceback 3 import requests 4 from lxml import etree 5 import re 6 from b ...

  10. Unity 2022.3.20f1新功能,异步实例化预制体Object.InstantiateAsync

    今天查看Unity 2022.3.20f1更新日志,发现新增了个异步实例化的功能,这个功能解决了Unity历史上实例化预制体卡顿的痛点,简直不要太爽. 具体的API文档请点击跳转. 做了个简单的实例化 ...