MYSQL练题笔记-子查询-两题合并-好友申请:谁有最多的好友;2016年的投资

一、第一个题谁有最多的好友

1.题目相关内容如下

1)相关的表和题目

MYSQL练题笔记-子查询-两题合并-好友申请:谁有最多的好友;2016年的投资_第1张图片

2)帮助理解题目的示例,提供返回结果的格式

MYSQL练题笔记-子查询-两题合并-好友申请:谁有最多的好友;2016年的投资_第2张图片

2.自己初步的理解

原以为这个相对来说简单一些,但还是错了,我没想到居然可以用union把两个id联合在一起,我想到的是自连接,然后也没成功,看了题解发现不是,而且其实这个题解我很难理解,所以迟迟不动。

3.题解展示和分析如下

MYSQL练题笔记-子查询-两题合并-好友申请:谁有最多的好友;2016年的投资_第3张图片

关键是from后面的子查询,请求的人有id,被请求的人也有id,那就是作为被请求的id最多的人,这里把他合在一起,但是如果一个人请求很多个人呢?

好像也行哦,因为这个RequestAccepted表是接收请求相关的表。所以就是说请求的人和被请求的出现的次数多都是有了一个好友的,我丢这一层我没想到,那其实理解了就不难了,但是要先能理解啊啧啧啧。

而且注意是使用union all实际情况肯定有重复。

4.总结

这是一道理解题,要仔细看题。

二、第二题2016年的投资

1.题目相关内容

1)相关的表和题目

MYSQL练题笔记-子查询-两题合并-好友申请:谁有最多的好友;2016年的投资_第4张图片

2)帮助理解题目的示例,提供返回结果的格式

MYSQL练题笔记-子查询-两题合并-好友申请:谁有最多的好友;2016年的投资_第5张图片

2.自己初步的理解

下面是我的题解,但是错了,看完题解后没有想到是用where in

select sum(i2.tiv_2016) as tiv_2016 from

insurance i1 join insurance i2

on i1.tiv_2015=i2.tiv_2015 and i1.lat <> i2.lat and i1.lon <> i2.lon;

3.题解展示和分析如下

select round(sum(insurance.tiv_2016),2) as tiv_2016

from insurance

where insurance.tiv_2015 in

(select tiv_2015 from insurance group by tiv_2015 having count(*)>1)

and concat(lat,lon)

in (select concat(lat,lon) from insurance

group by lat,lon

having count(*)=1);

这种居然可以用group by 之后根据count()的数量来看相等和不想等,是我见识短了。而且根本没想到where in。

4.总结

这么些天的学习,我真的发现要预习,因为我第一次看那些东西很陌生,一点思路都没有,第一天花点时间看看随便想一想,第二天可能会觉得难,但是强迫自己一步步思考就很好理解了。但如果比较难的第一天我基本写不出来除非之前遇到过。

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