前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何快速分析出城市人口流动数量?

如何快速分析出城市人口流动数量?

作者头像
猴子数据分析
发布2022-07-13 17:09:59
9760
发布2022-07-13 17:09:59
举报
文章被收录于专栏:猴子数据分析

【题目】

下面是统计每天各个城市之间的人口流入、流出的“各城市人口流动表”

需要通过以上数据,了解:

1:每个城市的总流入人口数量

2:统计2017年乘飞机在周末从北京流入的人口数

3:计算2018年流入流出长春的总人数

【问题1解题思路】:

计算每个城市的总流入人口数量

1、解题思路:此题分为2步,首先计算“总流入人口数量”,然后再分组到每个城市

2、题中提到“总流入人口数量” 需要用到聚集函数sum

3、“每个城市”的人口数量,需要按城市分组,用到分组函数group by,

代码语言:javascript
复制
select 流入城市 as 城市,sum(数量) as 总人口流入数
from 各城市人口流动表
group by 流入城市;

查询结果为:

【本题考点】

1、此题比较简单,考察聚合函数sum。常用的聚合函数还有count、max、min

2、考察分组group by子句的用法。需要注意的是group by子句列出的每一个字段都必须是select检索的列或者表达式,不能是聚集函数,也不能使用别名,group by分组后,如有条件筛选,使用Having语句过滤。

【问题2解题思路】:

统计2017年乘飞机在周末从北京流入的人口数

1、解题思路:此题分为2大步。第1步,先计算流入到北京的人口数,第2步,满足条件“2017年”、“乘飞机”、“周末”

2、计算"从北京流入的人口数",也就是“流出城市”为北京的人口数,需要用到汇总函数sum

代码语言:javascript
复制
select 流出城市,sum(数量) as 流出总人数
from 各城市人口流动表
where 流出城市="北京";

查询结果为:

即下面标红色的部分求和:

2、题目要求满足多个并列条件:交通工具是"飞机",流入年份是"2017年”并且是“周末”。多个条件并列用"and"。

代码语言:javascript
复制
select 流出城市,sum(数量) as 流出总人数
from 各城市人口流动表
where 流出城市="北京"
and 交通工具="飞机"
and 年份="2017"
and 星期六或者星期日;

3、年份查询,题目给出的“日期”字段是具体的日期,要用具体的日

筛选出年份,用到年份的提取函数year()

4、星期查询,需要用date_format(date,format)函数在“日期”字段中筛选出周末。因周末有2天,周六、周日,用or操作符,把周六日全部选出来。

代码语言:javascript
复制
select 流出城市,sum(数量) as 流出总人数
from 各城市人口流动表
where 流出城市="北京"
and 交通工具=3
and year(日期)="2017"
and(date_format(日期,'%w')=6 or date_format(日期,'%w')=0)
group by 流出城市;

查询结果:

即下面标红色框的部分求和:

【本题考点】

1、多条件并列and操作符,返回满足所有给定条件的行。

2、date_format(date,format) 函数,SQL中设置时间格式函数,其中括号里的“date”是要设置的日期,“format” 是设置成规定日期/时间的格式。根据format字符串格式化date值。下列字符和字符串是常用的:

格式化日期常用的字符串:

3、SQL常用的日期提取函数:

4、or操作符,筛选结果只要满足其中之一条件就被筛选出来,在与and连用时,优选计算and,and拥有较高的计算次序,or前后的条件一般需要用括号括起来,否则会优先计算and前后的条件,造成计算错误。

【问题3解题思路】:

计算2018年流入流出长春的总人数

1、解题思路:先把符合条件的"流入"的人数计算出来,并把符合条件的"流出"的人数计算出来,两者合并作为一个整体,然后对整体的结果再求和。

代码语言:javascript
复制
select sum(a)
from
(select sum(数量) as a
from 各城市人口流动表
where year(日期)="2018"
and 流出城市="长春"
union all
select sum(数量) as a
from  各城市人口流动表
where year(日期)="2018"
and 流入城市="长春"
)t;

查询结果为:

2、上一个解法思路比较清晰,但是写起来比较复杂,可以用“or”“and”连用简化一下,流入流出是一个条件,时间为一个条件,两者并列,简化为:

代码语言:javascript
复制
select sum(数量) as a
from 各城市人口流动表
where (流出城市="长春" or 流入城市="长春")
and year(日期)="2018";

即下面标红色的部分求和:

【本题考点】

1、此题考察子查询,把子查询的结果作为一个临时表来查询,需要理清各层的逻辑关系,子查询都是从内到外逐层运行,内层没有错误后,再运行外层。

2、union的用法,union执行两条及以上select 语句,并把结果合成一个结果来查询,union中的每个查询都必须包含相同的列,union all查询所有的行,union查询不重复的行。

3、or、and连用,第2题考点总结4已有说明。

【经验分享】:

1、动手多写,多练、多运行语句。SQL书本的语句比较简单,看着都会,也不难,写都写的出来,可是一运行发现却是错的,写跟运行正确是两回事,只有实际运行才能找出错误,才能有收获,技术才能提高。

2、复杂的语句,先写里面的子句,再写外面的聚合。发现了错误,按照逻辑步骤,一步步运行,确保每一小步没有问题,最后才能运行正确。开始没有经验的时候,检查错误都是从上到下一句句的检查,这是不对的。另外,需要多点耐心,急不得,经验都是一点点积累了,不可能一口气吃个胖子。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 猴子数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档