【sql学习】03-sql常用函数学习
发表于:2024-07-16 |

前言

本篇来学习一下sql的常用函数

本篇学习目标

sql常用函数

avg

定义

AVG() 函数返回数值列的平均值。

使用

为了方便测试,我新建了一个带有数字的表,结构如下
效果图
ok,接下来我们使用avg函数,求一下这个表中的age的平均值

1
SELECT AVG(age) AS ageaverage FROM users_data;

效果图

当然我们也可以求年龄大于平均值的数据

1
2
SELECT * FROM users_data
WHERE age > (SELECT AVG(age) FROM users_data);

效果图

count

定义

这个相当于统计符合条件的条数有几个

使用

我这里求一下年龄大于30岁以上的人有几个

1
select count(age) as nums from users_data where age>30;

答案显而易见就是2个。
效果图

同理,我们可以计算总条数

1
SELECT COUNT(*) AS nums FROM users_data;

也可以计算去重后的条数

1
SELECT COUNT(DISTINCT age) AS nums FROM users_data;

first

定义

FIRST() 函数返回指定的列中第一个记录的值。

使用
1
SELECT FIRST(column_name) FROM table_name;

但是mysql中不支持这个函数,我们如果要实现相同的效果就需要这样来得到

比如我们想要年龄最小的那个数据

1
2
3
SELECT age FROM users_data
ORDER BY age ASC
LIMIT 1;

效果图

last

定义

LAST() 函数返回指定的列中最后一个记录的值。

使用
1
SELECT LAST(column_name) FROM table_name;

同样的。mysql并不支持这个函数,我们如果要实现相同的效果就需要这样来得到

比如我们想要年龄最大的那个数据

1
2
3
SELECT age FROM users_data
ORDER BY age DESC
LIMIT 1;

效果图

max

定义

MAX() 函数返回指定列的最大值。

使用

同样的我们求年龄最大值
效果图

min

定义

MIN() 函数返回指定列的最小值。

使用

我们求年龄的最小值
效果图

sum

定义

SUM() 函数返回数值列的总数

使用

比如我想要求年龄总和
效果图

group by

定义

GROUP BY 语句可结合一些聚合函数来使用

group by简单使用

我这里再添加一个lisi的数据
效果图
然后我统计各个名字对应的年龄是多少

1
select id,username,sum(users_data.age) as nums from users_data group by username;

我们可以看到,我根据username合并了数据,将俩lisi的年龄加了起来。
效果图

GROUP BY 多表连接

我有这样俩个表
效果图
我将websites的id和access_log中的site_id出现1,2,3,4对应起来,求出现的次数,此时的代码如下

1
2
3
4
SELECT websites.name,COUNT(access_log.id) AS nums FROM access_log
LEFT JOIN websites
ON access_log.site_id=websites.id
GROUP BY websites.name;

效果图

HAVING

定义

HAVING 子句
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。

HAVING 子句可以让我们筛选分组后的各组数据。

使用
1
2
3
4
SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1
HAVING condition;

column1:要检索的列。
aggregate_function(column2):一个聚合函数,例如SUM、COUNT、AVG等,应用于column2的值。
table_name:要从中检索数据的表。
GROUP BY column1:根据column1列的值对数据进行分组。
HAVING condition:一个条件,用于筛选分组的结果。只有满足条件的分组会包含在结果集中。

我新建了一个access_logs的表
效果图

现在我们想要查找总访问量大于 200 的网站。

我们使用下面的 SQL 语句:

1
2
3
4
5
SELECT websites.name, websites.url, SUM(access_logs.count) AS nums FROM (access_logs
INNER JOIN Websites
ON access_logs.site_id=Websites.id)
GROUP BY Websites.name
HAVING SUM(access_logs.count) > 200;

效果图

EXISTS

定义

EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。

使用

比如我们现在我们想要查找访问量(count 字段)大于 200 的网站是否存在。

1
select websites.name,websites.url from websites where exists (select count from access_logs where websites.id=access_logs.site_id and count>200);

效果图

UCASE

定义

UCASE() 函数把字段的值转换为大写。

使用

SQL UCASE() 语法

1
SELECT UCASE(column_name) FROM table_name;

用于 SQL Server 的语法

1
SELECT UPPER(column_name) FROM table_name;

然后我们用自己的网页表做个测试,可以看到存储内容变成大写了

1
select ucase(name) from websites;

效果图;

LCASE

定义

LCASE() 函数把字段的值转换为小写。

使用

SQL LCASE() 语法

1
SELECT LCASE(column_name) FROM table_name;

用于 SQL Server 的语法

1
SELECT LOWER(column_name) FROM table_name;

同样的,我们可以用websites表做个测试

1
select lcase(name) from websites;

效果图;

MID

定义

MID() 函数用于从文本字段中提取字符。

使用

SQL MID() 语法

1
SELECT MID(column_name[,start,length]) FROM table_name;

下面的 SQL 语句从 “Websites” 表的 “name” 列中提取前 4 个字符:

1
2
SELECT MID(name,1,4) AS ShortTitle
FROM Websites;

效果图

LEN

定义

LEN() 函数返回文本字段中值的长度。

使用

SQL LEN() 语法

1
SELECT LEN(column_name) FROM table_name;

MySQL 中函数为 LENGTH():

1
SELECT LENGTH(column_name) FROM table_name;

下面的 SQL 语句从 “Websites” 表中选取 “name” 和 “url” 列中值的长度:

1
2
SELECT name, LENGTH(url) as LengthOfURL
FROM Websites;

效果图

ROUND

定义

ROUND() 函数用于把数值字段舍入为指定的小数位数。

1
SELECT ROUND(column_name,decimals) FROM TABLE_NAME;

column_name 必需。要舍入的字段。
decimals 可选。规定要返回的小数位数。

使用

ROUND(X): 返回参数X的四舍五入的一个整数。

1
SELECT ROUND(-1.23);

得到-1
ROUND(X,D): 返回参数X的四舍五入的有 D 位小数的一个数字。如果D为0,结果将没有小数点或小数部分。
SELECT ROUND(1.298, 1);
得到1.3
SELECT ROUND(1.298, 0);
得到1

NOW

定义

NOW() 函数返回当前系统的日期和时间。

使用
1
select name,url,NOW() as date from websites;

效果图

FORMAT()

定义

FORMAT() 函数用于对字段的显示进行格式化。

使用

下面的 SQL 语句从 “Websites” 表中选取 name, url 以及格式化为 YYYY-MM-DD 的日期:

1
SELECT name, url, DATE_FORMAT(Now(),'%Y-%m-%d') AS date FROM Websites;

效果图

结语

本篇文章就到这里了,更多内容敬请期待,债见!

上一篇:
【sql学习】04-sql进阶
下一篇:
【sql学习】02-sql其他基础语法