海淀做网站的公司,怎么买速成网站,wordpress文章什么时候收录,厦门seo优化外包公司题目链接#xff1a;1934. 确认率
思路
由题可知#xff0c;两个表#xff0c;一个表为Signups注册表#xff0c;另一个表为Confirmations信息确认表#xff0c;表的关联关系为 一对一#xff0c;且user_id作为两个表的连接条件#xff08;匹配字段#xff09;#…题目链接1934. 确认率
思路
由题可知两个表一个表为Signups注册表另一个表为Confirmations信息确认表表的关联关系为 一对一且user_id作为两个表的连接条件匹配字段使用左连接将两张表进行连接然后添加过滤条件得到结果。
考点或用到的知识能够对值进行四舍五入且处理小数点位数的ROUND函数求平均值的AVG函数对于ENUM 类型字段进行判断的IF函数
用到的函数用法也附上
IF(value,value1,value2)如果value的值为TRUE返回value1否则返回value2 ROUND(x,y)返回一个对x的值进行四舍五入后最接近x的值并保留到小数点后面Y位 IFNULL(value1,value2)如果value1不为NULL返回value1否则返回value2
解题过程
题目要求查找每个用户的确认率 通过查看样例表可知对于Signups表中的user_idConfirmations表中的user_id并都与之一一对应所以要使用 LEFT JOIN左连接确保每个用户都具有信息确认表的记录。
SELECT *
FROM signups s
LEFT JOIN confirmations c
ON s.user_id c.user_id;然后对结果集进行分组GROUP BY s.user_id 题目要求用户的 确认率 是 confirmed 消息的数量除以请求的确认消息的总数。没有请求任何确认消息的用户的确认率为 0 。确认率四舍五入到 小数点后两位 。 编写对应的语句
ROUND(SUM(IF(c.action confirmed,1,0)) / COUNT(s.user_id),2)
SUM(IF(c.action confirmed,1,0)) / COUNT(s.user_id) 等价于IFNULL(AVG(c.action confirmed), 0)
Code
# Write your MySQL query statement below
SELECT s.user_id,
ROUND(SUM(IF(c.action confirmed,1,0)) / COUNT(s.user_id), 2) AS confirmation_rate
FROM signups s
LEFT JOIN confirmations c
ON s.user_id c.user_id
GROUP BY s.user_id