上一篇「22 B端产品经理与MySQL基本查询、排序(2)」了解了基本的常识和基本查询以及单列排序。下面介绍常见的基本函数、分组查询以及多列排序:
基本函数
user表 (注:以下SQL语句示例全部基于下面「user表」)
uid | uname | depid | uage | ugender | msal | hiredate |
---|---|---|---|---|---|---|
1 | 张三 | 1 | 33 | 男 | 20000 | 2013/07/12 |
2 | 李四 | 2 | 25 | 女 | 15000 | 2018/11/23 |
3 | 王锵 | 1 | 37 | 男 | 25000 | 2012/10/15 |
4 | 彭昶 | 3 | 24 | 女 | 15000 | 2020/06/12 |
5 | 王小二 | 2 | 28 | 女 | 20000 | 2017/01/19 |
6 | 宁笑笑 | 1 | 21 | 女 | Null | 2023/12/13 |
7 | 陈晨 | 4 | 33 | 男 | 25000 | 2022/04/16 |
常用函数 | 作用 | 举例 | 解释 |
---|---|---|---|
COUNT() | 统计;返回查询的记录总数。 | | 返回user 表中uid 共多少条记录。 |
AVG() | 平均值;返回一个表达式的平均值。 | | 返回user 表中uage 字段的平均值。 |
SUM() | 求和;返回指定字段的总和。 | | |
MAX() | 最大值;返回字段中的最大值。 | | 返回user 表中uage 字段的最大值。 |
MIN() | 最小值;返回字段中的最小值。 | | 返回user 表中uage 字段的最小值。 |
注:AS 后的字段为查询的结果起得名称。
日期函数 | 作用 | 举例 | 结果 |
---|---|---|---|
NOW() | 返回当前日期和时间。 | | 2019-10-07 16:27:44 |
CURDATE() | 返回当前日期。 | | 2019-10-07 |
CURRENT_TIME() | 返回当前时间。 | | 16:27:44 |
DATE() | 提取日期。 | | 2017-06-15 |
DATEDIFF(d1,d2) | 计算俩日期之间相隔的天数。 | | 32 |
注:更多函数使用可参考:「MySQL函数教程」。
分组查询
-
GROUP BY:根据一个或多个列对结果集进行分组。
-
在分组的列上我们可以使用上述提到的 COUNT, SUM, AVG,等函数。
-
GROUP BY是用于汇总和分析数据的重要工具。
SELECT depid,count(uid)
FROM user
GROUP BY depid
--查询「user表」中,每个部门的编号以及每个部门下的人数。
SELECT depid,COUNT(*)
FROM user
WHERE msal>20000
GROUP BY depid;
--查询「user表」中,每个部门的编号以及每个部门下月薪大于20000的人数。
-
WHERE: 是对分组前记录的条件,如果某行记录没有满足 WHERE 子句的条件,那 么这行记录不会参加分组;
-
HAVING: 是对分组后数据的约束。
SELECT depid, SUM(msal)
FROM user
GROUP BY depid
HAVING SUM(msal) > 50000;
--查询「user表」中,月薪总和大于 50000 的部门编号以及月薪和。
多列排序
-
多列排序
SELECT * FROM user
ORDER BY uage ASC, hiredate DESC;
--查询「user表」,并将查询的数据先按用户年龄升序排,当年龄相同时再按入职日期降序排。
-
使用表达式排序
SELECT uname, msal * 12 AS ysal
FROM user
ORDER BY ysal DESC;
--查询「user表」中的用户姓名和 用户根据月薪计算的出的年薪,并按年薪降序排序。
-
使用 NULLS FIRST 或 NULLS LAST 处理 NULL 值。
SELECT * FROM user
ORDER BY usal DESC NULLS LAST;
--查询「user表」,并将查询的数据按用户薪水降序排,将 NULL 值排在最后。