前言
接触SQL已经是第五天了,我突然发现了一个东西,就是学习这个神奇的东西,真的不能三天打鱼两天晒网,不然真的会很快生疏!所以,一定不能懒惰,要时刻保持学习的热情!
今天我们要学习的是必会的常用函数
首先回顾一下上次涉及到的知识点:
1、WHERE IN子句
2、两张表之间的联结
使用FROM JOIN ON
FROM <原表1名> AS <新表1名>
JOIN <原表2名> AS <新表2名>
ON <新表1名>.<列名>=<新表2名>.<列名>
3、三张表联结
进行两次内连接,或者左外连接。
FROM <原表1名> AS <新表1名>
LEFT JOIN <原表2名> AS <新表2名>
ON <新表1名>.<列名>=<新表2名>.<列名>
LEFT JOIN <原表3名> AS <新表3名>
ON <新表3名>.<列名>=<新表2名>.<列名>
4、UNION 和 UNION ALL 的区别
union是合并两个查询语句的结果集,并排除重复项
union all是不排除重复项的
union使用前提
使用union合并两个表时,需要两个表的结果集字段完全一样;
SLogan:利用有限的时间,撸起袖子加油干!既要面包也要玫瑰!!!
一、学习过程
1、条件函数
【SQL26】计算25岁以上和以下的用户数量
解题思路:
这里涉及到25岁以上和25岁以下的输出值,有一个新的知识点:
CASE函数
是一种多分支的函数,可以根据条件列表的值返回多个可能的结果表达式中的一个。
可用在任何允许使用表达式的地方,但不能单独作为一个语句执行。
CASE 测试表达式
WHEN 简单表达式1 THEN 结果表达式1
WHEN 简单表达式2 THEN 结果表达式2 …
WHEN 简单表达式n THEN 结果表达式n
[ ELSE 结果表达式n+1 ]
END
计算测试表达式,按从上到下的书写顺序将测试表达式的值与每个WHEN子句的简单表达式进行比较。
如果某个简单表达式的值与测试表达式的值相等,则返回第一个与之匹配的WHEN子句所对应的结果表达式的值。
如果所有简单表达式的值与测试表达式的值都不相等,
若指定了ELSE子句,则返回ELSE子句中指定的结果表达式的值;
若没有指定ELSE子句,则返回NULL。
代码如下:
SELECT
CASE
WHEN age < 25 OR age IS NULL THEN '25岁以下'
WHEN age >= 25 THEN '25岁及以上'
END age_cut,COUNT(*)number
FROM user_profile
GROUP BY age_cut
结果:
【SQL27】查看不同年龄段的用户明细
解题思路:
将用户划分为20岁以下,20-24岁,25岁及以上三个年龄段。
和上一题一样使用CASE函数,从大到小控制年龄范围。
代码如下:
select device_id, gender,
case
when age>=25 then '25岁及以上'
when age>=20 then '20-24岁'
when age>=0 then '20岁以下'
else '其他'
end as age_cut
from user_profile
结果:
2、日期函数
【SQL28】计算用户8月每天的练题数量
解题思路:
问题分解:
题目条件:2021年8月,写法有很多种,比如用year/month函数的year(date)=2021 and month(date)=8
每天:按天分组group by date
题目数量:count(question_id)
从输出结果当中可知每天的字段只取了几号,要去掉年月,用day函数即可
代码如下:
select
day(date) as day,
count(question_id) as question_cnt
from question_practice_detail
where month(date)=8 and year(date)=2021
group by date
结果:
【SQL29】计算用户的平均次日留存率
解题思路:
暂无
代码?
(今天没做出来,明天继续!!!)
总结
昨天竟然断更了!!我的错!!!今天有涉及到好多新的知识点,还有一题有点难度,没做出来,今晚钻研一下,明天继续,学习是一个需要坚持的过程,不能半途而废。