说明
我们需要掌握一些常用的MySQL函数和一些写SQL需要注意的情况,这样我们才能更好得写出一些SQL,更好地解决我们的问题。
关于聚合函数的筛选结果筛选条件
关于聚合函数的筛选结果作为筛选条件时,不能用where来做条件判断,而是要使用having语法。
时间日期函数
如果我们的数据库表中有字段(date)的值为2023-03-23这样的,那么我们可以使用函数
year(date)=2023
month(date)=03
day(date)=23
string的截取
如果我们需要在字段中截取字段中某些值,那么我们可以使用函数
substring_index(filed,'那个字符开始截取',从第几个字符开始截取)
如果最后一个参数为负数,那么从倒数的开始
如http:/ur/bisdgboy777要截取出url后面的内容
substring_index (blog_url, '/', -1)
注意这个函数也是可以嵌套查询的
根据字段的条件来分组
CASE 测试表达式
WHEN 简单表达式1 THEN 结果表达式1
WHEN 简单表达式2 THEN 结果表达式2 …
WHEN 简单表达式n THEN 结果表达式n
[ ELSE 结果表达式n +1 ]
END
如
select
device_id,
gender,
case
when age < 20 then '20岁以下'
when age between 20 and 24 then '20-24岁'
when age >= 25 then '25岁及以上'
else '其他'
end as age_cut
from
user_profile
如果有输出顺序,那么我们需要看看能不能用到union,union all关键字
union 和 union al的区别在于是否结果去重
union :结果去重
union all :结果不去重
如例子:
(使用union或者union all 一般都有个或,但是我们需要注意输出顺序)
运营想要分别查看学校为山东大学或者性别为男性的用户的device_id、gender、age和gpa数据,请取出相应结果,结果不去重。(注意输出的顺序,先输出学校为山东大学再输出性别为男生的信息):
select
device_id,
gender,
age,
gpa
from
user_profile
where
university = '山东大学'
union all
select
device_id,
gender,
age,
gpa
from
user_profile
where
gender = 'male';
保留小数为
结果保留到小数点后面1位(1位之后的四舍五入)
select round(max(gpa),1) from table ;