首页 > 数据库 >【SQL】确认率

【SQL】确认率

时间:2024-08-14 11:24:14浏览次数:7  
标签:confirmed 确认 用户 user SQL action id

目录

题目

分析

代码


题目

表: Signups

+----------------+----------+
| Column Name    | Type     |
+----------------+----------+
| user_id        | int      |
| time_stamp     | datetime |
+----------------+----------+
User_id是该表的主键。
每一行都包含ID为user_id的用户的注册时间信息。

表: Confirmations

+----------------+----------+
| Column Name    | Type     |
+----------------+----------+
| user_id        | int      |
| time_stamp     | datetime |
| action         | ENUM     |
+----------------+----------+
(user_id, time_stamp)是该表的主键。
user_id是一个引用到注册表的外键。
action是类型为('confirmed', 'timeout')的ENUM
该表的每一行都表示ID为user_id的用户在time_stamp请求了一条确认消息,该确认消息要么被确认('confirmed'),要么被过期('timeout')。

用户的 确认率 是 'confirmed' 消息的数量除以请求的确认消息的总数。没有请求任何确认消息的用户的确认率为 0 。确认率四舍五入到 小数点后两位 。

编写一个SQL查询来查找每个用户的 确认率 。
以 任意顺序 返回结果表。
查询结果格式如下所示。

示例1:

输入:
Signups 表:
+---------+---------------------+
| user_id | time_stamp          |
+---------+---------------------+
| 3       | 2020-03-21 10:16:13 |
| 7       | 2020-01-04 13:57:59 |
| 2       | 2020-07-29 23:09:44 |
| 6       | 2020-12-09 10:39:37 |
+---------+---------------------+
Confirmations 表:
+---------+---------------------+-----------+
| user_id | time_stamp          | action    |
+---------+---------------------+-----------+
| 3       | 2021-01-06 03:30:46 | timeout   |
| 3       | 2021-07-14 14:00:00 | timeout   |
| 7       | 2021-06-12 11:57:29 | confirmed |
| 7       | 2021-06-13 12:58:28 | confirmed |
| 7       | 2021-06-14 13:59:27 | confirmed |
| 2       | 2021-01-22 00:00:00 | confirmed |
| 2       | 2021-02-28 23:59:59 | timeout   |
+---------+---------------------+-----------+
输出: 
+---------+-------------------+
| user_id | confirmation_rate |
+---------+-------------------+
| 6       | 0.00              |
| 3       | 0.00              |
| 7       | 1.00              |
| 2       | 0.50              |
+---------+-------------------+
解释:
用户 6 没有请求任何确认消息。确认率为 0。
用户 3 进行了 2 次请求,都超时了。确认率为 0。
用户 7 提出了 3 个请求,所有请求都得到了确认。确认率为 1。
用户 2 做了 2 个请求,其中一个被确认,另一个超时。确认率为 1 / 2 = 0.5。

分析

两表Signups和Confirmations,查找每个用户 没有请求任何确认消息的用户的确认率为 0

有用户可能没有请求任何确认消息,使用左连接 from Signups s left join Confirmations c on s.user_id = c.user_id

查找每个用户的 确认率 确认率 是 'confirmed' 消息的数量除以请求的确认消息的总数 确认率四舍五入到 小数点后两位 。

输出用户id和确认率

确认率通过sum+if或者avg实现

小数点后两位通过round实现

select

s.user_id,

-- round(sum(if(action='confirmed',1,0))/count(s.user_id),2) as confirmation_rate

round(ifnull(avg(c.action='confirmed'),0),2) as confirmation_rate

代码

select 
    s.user_id,
    -- round(sum(if(action='confirmed',1,0))/count(s.user_id),2) as confirmation_rate
    round(ifnull(avg(c.action='confirmed'),0),2) as confirmation_rate
from Signups s left join Confirmations c
on s.user_id = c.user_id
group by s.user_id

标签:confirmed,确认,用户,user,SQL,action,id
From: https://blog.csdn.net/weixin_73404807/article/details/141125736

相关文章

  • 【SQL】平均售价
    目录题目分析代码题目表:Prices+---------------+---------+|ColumnName|Type|+---------------+---------+|product_id|int||start_date|date||end_date|date||price|int|+---------------+-------......
  • docker 运行 postgresql
    docker运行postgresql服务端及客户端 注意:是postgres不是postgre!!! 1.orb里设置{"registry-mirrors":["https://改成你的.mirror.aliyuncs.com","https://docker.888666222.xyz"],"ipv6":true} 2.访问https://docker.registry.cyo......
  • mysql 创建定时任务清理指定表
    一、创建定时任务1、确保MySQL的事件调度器已经开启。可以通过以下SQL命令检查是否开启:SHOWVARIABLESLIKE'event_scheduler';2、如果返回的值为OFF,则可以通过以下命令开启事件调度器:SETGLOBALevent_scheduler=ON;3、以下是一个删除your_table表中7天前数据的示例:......
  • GreatSQL 并行Load Data加快数据导入
    GreatSQL并行LoadData加快数据导入数据库信息数据库版本:GreatSQL8.0.32-25Clickhouse表需要导入到GreatSQL中,表数据量庞大所以选用导出CSV的方式。测试数据复现操作loaddataMySQLloaddata语句能快速将一个文本文件的内容导入到对应的数据库表中(一般文本的一行对应......
  • 【漏洞复现】普华-PowerPMS APPGetUser SQL注入漏洞
             声明:本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动,将与本文档的作者或发布者无关。一、漏洞描述PowerPMS是一款综合性的企业管理系统,它集成了财务管理、销售管理、采购管理、仓储管理以及项目管理等多个功......
  • 【MySQL】数据库约束和多表查询
    目录1.前言2.数据库约束2.1约束类型2.2 NULL约束2.3NUIQUE:唯一约束2.4 DEFAULT:默认值约束2.5 PRIMARYKEY:主键约束2.6FOREIGNKEY:外键约束1.7 CHECK约束3.表的设计 3.1一对一3.2一对多3.3多对多4.新增5.查询5.1聚合查询5.1.1聚合函数5.1.2 GROUPBY......
  • MySQL- 覆盖索引
    覆盖索引(CoveringIndex)是MySQL中的一种优化技术,它能够显著提高查询性能。在使用覆盖索引的情况下,查询操作只需要访问索引即可获取所需的数据,而不必再访问表的实际数据行(即不需要回表)。这种优化可以减少I/O操作,提升查询效率。1.什么是覆盖索引?覆盖索引是指一个索引包......
  • MySQL- 索引下推
    索引下推(IndexConditionPushdown,简称ICP)是MySQL5.6引入的一项优化技术,它通过将部分查询条件“下推”到索引扫描阶段,从而减少不必要的行访问和回表操作,提高查询性能。1.索引下推的概念在传统的索引扫描过程中,MySQL会首先通过索引找到符合索引条件的记录,然后回表(即......
  • MySQL使用教程笔记(远程访问)
    远程连接MySQL数据库_mysql远程访问数据库-CSDN博客如何远程连接mysql数据库服务器_mysql如何连接远程数据库服务器_如何连接远程数据库mysql-腾讯云开发者社区-腾讯云(tencent.com)如何使用C#连接远程MySQL服务器?_webrtc_weixin_0010034-MySQL数据库(csdn.net)c#中mysq......
  • 最全MySQL面试题和答案(四)
    1.数据库结构优化一个好的数据库设计方案对于数据库的性能往往会起到事半功倍的效果。优化设计需要考虑数据冗余、查询和更新的速度、字段的数据类型是否合理等多方面的因素。将字段很多的表分解成多个表概述:对于字段较多的表,如果有些字段的使用频率很低,可以将这些字段分离出来......