前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >今天你登录了吗?

今天你登录了吗?

原创
作者头像
猴子数据分析
修改2021-05-08 10:20:34
3340
修改2021-05-08 10:20:34
举报
文章被收录于专栏:猴子数据分析猴子数据分析

【题目】

“7月登录表”里记录了7月登录的用户信息。“8月登录表”里记录了是8月登录的用户信息。

问题1:7月、8月两个月登录人数共有多少

问题2:7月未登录但8月登录的人数有多少

【问题1解题思路】

查询7月登录和8月登录人数的总和

1.7月和8月两个月登录的用户数据分别在“7月登录表”和”8月登录表”中,涉及到多个表,所以要用到多表联结

2.可以通过“表的加法”(union)先将两张表合在一起,这里两张表相加时需要去掉重复值,所以要用“union”而不能用“union all”

代码语言:javascript
复制
1 select 用户ID
2 from 7月份登录表
3 union
4 select 用户ID
5 from 8月份登录表;

3.通过汇总函数“count()”对合并后的表进行统计,把上一步的查询结果作为这一步的子查询

代码语言:javascript
复制
1 select count(distinct 用户ID)
2 from (
3 select 用户ID
4 from 7月份登录表
5 union
6 select 用户ID
7 from 8月份登录表
8 ) as a;

查询结果

【本题考点】

1.用“union” 或 “union all” 进行表的加法运算。如果需要保留两个表中重复出现的数据行,需要使用“union all”

2.SQL子查询的应用。子查询就是一次性的视图,还记得子查询的应用场景吗?我们对照下面的图来复习一下

3.本题要特别注意,因为做了两个表的加法,产生了一个新表,MySQL要求每一个新产生的表都要有一个别名(as 别名),否则就会报错(每一个新产生出来的表都必须有一个自己的别名)

【问题2解题思路】

查询7月未登录,同时8月登录的人数

1.这道题目的关键在于要明确7月未登录,同时8月登录的人在哪里。我们可以画一个文氏图清晰地把这部分数据表现出来:

左边圆圈代表“7月登录的人”右边圆圈代表“8月登录的人”,通过图形能清楚地看出来阴影部分就是我们要找的“7月未登录,同时8月登录的人”

2.如何把阴影部分的数据找出来呢?我们先要用SQL把右边表的数据取出来,然后再去掉左边和右边共有部分的数据,这时我们想到通过“表的联结”,可以通过“右联结”,完成上面的操作

代码语言:javascript
复制
1 select 
2 from 7月份登录表 as a 
3 right join 8月份登录表 as b;

3.注意这里我们找的是下图中框出部分的数据,所以要加一个条件:

7月份登录表.用户ID is null

代码语言:javascript
复制
1 select
2 from 7月份登录表
3 as a right join 8月份登录表 as b
4 on a.用户ID=b.用户ID
5 where a.用户ID is null;

4.最后再用汇总函数统计去重后的用户人数

代码语言:javascript
复制
1 select count(distinct 用户ID) as 人数
2 from 7月份登录表 as a 
3 right join 8月份登录表 as b
4 on a.用户ID=b.用户ID
5 where a.用户ID is null;

查询结果

【本题考点】

本题用到了右联结的应用,几种联结和它们的用法还记得吗,我们来复习一下

1.什么是联结

联结是表与表之间的关联关系

2.内联结、左联结、右联结和全联结分别对照下图复习一下吧

当实际业务中想要生成固定行数的表单或者特别说明了要某一张表里的全部数据时,使左联结或者右联结。

其他情况下,使用内联结,获取两个表的公共部分。

推荐:从零学会SQL?

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档