二十六、MySQL GROUP BY 分组查询数据

AI-摘要
Tianli GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
二十六、MySQL GROUP BY 分组查询数据
云少二十六、MySQL GROUP BY 分组查询数据
GROUP BY 语句根据一个或多个列对结果集进行分组
在分组的列上可以使用 COUNT()
, SUM()
, AVG()
等函数
GROUP BY
语法格式
SQL SELECT 中语句使用 GROUP BY 子句对查询数据进行分组的语法格式如下
1 | SELECT column_name, function(column_name) |
范例数据
可以在 mysql>
命令行中运行以下语句填充范例数据
1 | DROP TABLE IF EXISTS `tbl_language`; |
tbl_language
表中的数据如下
1 | +----+--------+----------------------------+------------+ |
tbl_rank
表中的数据如下
1 | +----+--------+---------+------+---------+ |
使用 GROUP BY
语句对 tbl_rank
中的 name
进行分组
可以使用下面的 GROUP BY 语句将数据表按 name
进行分组,并统计每个 name
有多少条记录
1 | SELECT name, COUNT(*) FROM tbl_rank GROUP BY name; |
运行结果如下
1 | MariaDB [test2]> SELECT name, COUNT(*) FROM tbl_rank GROUP BY name; |
可以使用下面的 GROUP BY 语句将数据表按 name
进行分组,并统计每个 name
的平均排名
1 | SELECT name, AVG(rank) FROM tbl_rank GROUP BY name; |
运行结果如下
1 | MariaDB [test]> SELECT name, AVG(rank) FROM tbl_rank GROUP BY name; |
使用 WITH ROLLUP
1 | WITH ROLLUP` 可以实现在分组统计数据基础上再进行相同的统计 ( `SUM,AVG,COUNT ...) |
例如下面的语句将表 tbl_rank
按 name
进行分组,并统计每个 name
的平均排名,然后统计所有语言的平均排名
1 | SELECT name, AVG(rank) FROM tbl_rank GROUP BY name WITH ROLLUP; |
运行结果如下
1 | MariaDB [test2]> SELECT name, AVG(rank) FROM tbl_rank GROUP BY name WITH ROLLUP; |
其中记录 NULL 表示所有语言的平均排名
coalesce()
可以使用 coalesce()
来设置一个可以取代 NUll
的名称
coalesce()
语法格式如下
1 | select coalesce(a,b,c); |
参数说明
1、 如果 a==null
则选择 b
2、 如果 b==null
则选择 c
3、 如果 a!=null
则选择 a
4、 如果 a b c 都为 null ,则返回为 null (没意义)
下面的 SQL
语句使用 total
来代替 null
1 | SELECT coalesce(name,'count'), AVG(rank) FROM tbl_rank GROUP BY name WITH ROLLUP; |
运行结果如下
1 | MariaDB [test2]> SELECT coalesce(name,'count'), AVG(rank) FROM tbl_rank GROUP BY name WITH ROLLUP; |
评论
匿名评论隐私政策
TwikooArtalk
✅ 你无需删除空行,直接评论以获取最佳展示效果