力扣1132(MySQL)-报告的记录Ⅱ(中等)
题目:
编写一段 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)-报告的记录Ⅱ(中等)的更多相关文章
- 力扣1689. 十-二进制数的最少数目-C语言实现-中等难度题
题目 传送门 如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 .例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是 ...
- 力扣1438. 绝对差不超过限制的最长连续子数组-C语言实现-中等难度
题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条 ...
- 力扣1052. 爱生气的书店老板-C语言实现-中等难度
题目 传送门 文本 今天,书店老板有一家店打算试营业 customers.length 分钟.每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开. 在某些时 ...
- 力扣---511. 游戏玩法分析 I
活动表 Activity: +--------------+---------+| Column Name | Type |+--------------+---------+| player ...
- LeetCode 1244. 力扣排行榜
地址 https://www.acwing.com/solution/LeetCode/content/5765/ 题目描述新一轮的「力扣杯」编程大赛即将启动,为了动态显示参赛者的得分数据,需要设计一 ...
- 力扣Leetcode 45. 跳跃游戏 II - 贪心思想
这题是 55.跳跃游戏的升级版 力扣Leetcode 55. 跳跃游戏 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃 ...
- 【力扣】82. 删除排序链表中的重复元素 II
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字. 返回同样按升序排列的结果链表. 示例 1: 输入:hea ...
- 力扣---1148. 文章浏览 I
Views 表:+---------------+---------+| Column Name | Type |+---------------+---------+| article_i ...
- MySQL高效获取记录总数
通常mysql获取查询记录总数我们使用如下语句: SELECT COUNT(*) FROM users WHERE k='avs'; 或:SELECT id FROM goods WHERE k=' ...
- CentOS7.4安装MySQL踩坑记录
CentOS7.4安装MySQL踩坑记录 time: 2018.3.19 CentOS7.4安装MySQL时网上的文档虽然多但是不靠谱的也多, 可能因为版本与时间的问题, 所以记录下自己踩坑的过程, ...
随机推荐
- 代码片段管理软件 - 发现 utools 这个工具还行 windows软件
代码片段管理软件 - 发现 utools 这个工具还行 windows软件 介绍 这个软件不是专业的代码片段工具 好在还能凑合用 最完美的还是苹果那个软件,但是用的win没办法了 这个可以粘贴到vsc ...
- Dreamweaver基础教程:学习JavaScript
目录 简介 用法 输出 语法 字面量 变量 操作符 语句 关键字 注释 数据类型 函数 函数表达式 Function() 构造函数 自调用函数 箭头函数 arguments 对象 使用构造函数调用函数 ...
- day03-2-应用线程02
JavaGUI-坦克大战03-2 7.线程的应用02 7.3.坦克大战4.0版 坦克大战4.0版 增加功能: 功能1.让敌人的坦克也能够发射子弹(可以有多个子弹) 功能2.当我方坦克集中敌人坦克时,敌 ...
- Ubuntu 的源相关介绍(最近在配gstreamer的时候,紧急补充的知识)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- 记录--实时音视频功能简析(live-pusher与live-player)
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 使用须知 2017年下半年,微信6.5.21版本支持在线音视频功能.开发者可以通过两个音视频组件 和 实现实时地在线直播.视频通话.语音通 ...
- GIT版本控制学习博客
GIT版本控制学习博客 环境部署 下载git版本控制即可. 用户配置 (1)设置用户及地址 git config --global user.name "Username" git ...
- 鸿蒙HarmonyOS实战-ArkUI组件(Grid/GridItem)
一.Grid/GridItem 1.概述 网格布局是一种新型的布局方式,它按照网格来划分页面,通过列和行来定义网格,使得页面的布局更加灵活.简洁.易于维护.网格布局能够将页面分成多个单元格,可以在这些 ...
- 插入排序【Java]
1 package class01; 2 3 import java.util.Arrays; 4 5 public class Code03_InsertionSort { 6 7 public s ...
- Python爬虫爬取爱奇艺、腾讯视频电影相关信息(改进版)---团队第一阶段冲刺
爱奇艺 1 import time 2 import traceback 3 import requests 4 from lxml import etree 5 import re 6 from b ...
- Unity 2022.3.20f1新功能,异步实例化预制体Object.InstantiateAsync
今天查看Unity 2022.3.20f1更新日志,发现新增了个异步实例化的功能,这个功能解决了Unity历史上实例化预制体卡顿的痛点,简直不要太爽. 具体的API文档请点击跳转. 做了个简单的实例化 ...