MYSQL练题笔记-连接-确认率

leetcode 高频SQL50题(基础版)最后一题

一、题目相关内容

1)相关的表

MYSQL练题笔记-连接-确认率_第1张图片

2)题目

MYSQL练题笔记-连接-确认率_第2张图片

3)帮助你理解题目的示例,同时告诉你查询结果的格式

MYSQL练题笔记-连接-确认率_第3张图片

MYSQL练题笔记-连接-确认率_第4张图片

二、自己初步的理解

select two.user_id,round((message_confir/message_sum),2) as confirmation_rate from (select user_id,count(*)as message_confir from(select user_id,count(*) as message_sum from Signups s left join Confirmations c on s.user_id=c.user_id group by user_id)one where action='confirmed') as two;

上面是我写的,好复杂,然后我看题解其实不难,都是学过的,说明我前面还没有融汇贯通。

三、题解展示和分析

MYSQL练题笔记-连接-确认率_第5张图片

1.没想到的点是用avg()函数

好妙的一个点啊。因为求的是确认率,我没有联想到使用avg()这个求平均值的函数,可以这样算比率啊。所以有时候不要被函数名多限制啊。

 

2.有一个关键点是ifnull()

百度iffull()如何使用,如下图

MYSQL练题笔记-连接-确认率_第6张图片

没有考虑进去请求的确认量为空的情况;很多情况都要考虑有人没做这件事怎么办。

 

四、总结

1.avg()函数不仅仅局限于算平均数,思维开阔些,求分组后某个值的比率也可。

2.ifnull()函数考虑为空的情况返回什么值,需要考虑各种情况的存在

3.其实group by后面的字段可以不加表名,但是我有些我想到前面一题

至少有5名直接下属的经理,那个group by后面的字段需要加表名,所以有时候判断一下需不需要加。

你可能感兴趣的:(mysql,数据库,笔记,leetcode)