MySql group by 分组

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: MySql group by 分组

在数据库操作中我们需要对查询到的数据进行分组,那么我们就需要用到 group by,但是由于 mysql 的语法宽松,尽量不要在分组的时候放入没有意义的字段到分组中,使用数据也要以组的形式去使用。


``` group by: 对查询到的数据,以给定的字段进行分组,结果就是将数据数据分成若干份, 每组作为一个"整体"成为一行数据。


可以单个字端分组,也可以多个 select * from test group by name; select * from test group by name, age;


测试数据: mysql> select * from test; +----+------+------+ | id | name | age | +----+------+------+ | 1 | dzm | 20 | | 2 | xyq | 20 | | 3 | xyq | 20 | | 4 | djy | 5 | | 5 | NULL | NULL | +----+------+------+ ```


``` 我们这里相当于指定用 name 来进行分组,也就是每一个不同值的 name 都是一个新组 mysql> select * from test group by name; +----+------+------+ | id | name | age | +----+------+------+ | 5 | NULL | NULL | | 4 | djy | 5 | | 1 | dzm | 20 | | 2 | xyq | 20 | +----+------+------+


我们这里相当于指定用 age 来进行分组,也就是每一个不同值的 age 都是一个新组 而且从数据显示来看,只会显示出来在最前面的那条数据,后面的 xyq 也是 20 但是这里只显示出 dzm 这一栏就截止了 mysql> select * from test group by age; +----+------+------+ | id | name | age | +----+------+------+ | 5 | NULL | NULL | | 4 | djy | 5 | | 1 | dzm | 20 | +----+------+------+


这里是以两个字段来进行分组,会发现 xyq 这一栏就只剩下一个了,其他还在,因为就 xyq 这一栏这两个字段值一样,所以就被保留了一份 mysql> select * from test group by name, age; +----+------+------+ | id | name | age | +----+------+------+ | 5 | NULL | NULL | | 4 | djy | 5 | | 1 | dzm | 20 | | 2 | xyq | 20 | +----+------+------+


常用计算 count() avg() max() min() sum() mysql> select name, count() as 数量, avg(age) as 平均年龄, max(age) as 最大年龄, min(age) as 最小年龄, sum(age) as 累计年龄和 from test group by name; +------+--------+--------------+--------------+--------------+-----------------+ | name | 数量 | 平均年龄 | 最大年龄 | 最小年龄 | 累计年龄和 | +------+--------+--------------+--------------+--------------+-----------------+ | NULL | 1 | NULL | NULL | NULL | NULL | | djy | 1 | 5.0000 | 5 | 5 | 5 | | dzm | 1 | 20.0000 | 20 | 20 | 20 | | xyq | 2 | 20.0000 | 20 | 20 | 40 | +------+--------+--------------+--------------+--------------+-----------------+ ```


  • 使用 group by 报错,原因:是在 Mysql5.7 下 sqlmode 默认为 ONLY_FULL_GROUP_BY,解决方案:Mysql (ONLYFULLGROUPBY) Expression #1 of SELECT list is not in GROUP BY ...

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(5)作者——LJS[含MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页等详解步骤及常见报错问题所对应的解决方法]
MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页、INSERT INTO SELECT / FROM查询结合精例等详解步骤及常见报错问题所对应的解决方法
|
1月前
|
关系型数据库 MySQL 索引
MySQL的group by与count(), *字段使用问题
正确使用 `GROUP BY`和 `COUNT()`函数是进行数据聚合查询的基础。通过理解它们的用法和常见问题,可以有效避免查询错误和性能问题。无论是在单列分组、多列分组还是结合其他聚合函数的场景中,掌握这些技巧和注意事项都能大大提升数据查询和分析的效率。
144 0
|
3月前
|
算法 关系型数据库 MySQL
MySQL高级篇——排序、分组、分页优化
排序优化建议、案例验证、范围查询时索引字段选择、filesort调优、双路排序和单路排序、分组优化、带排序的深分页优化
|
4月前
|
关系型数据库 MySQL 数据处理
Mysql关于同时使用Group by和Order by问题
总的来说,`GROUP BY`和 `ORDER BY`的合理使用和优化,可以在满足数据处理需求的同时,保证查询的性能。在实际应用中,应根据数据的特性和查询需求,合理设计索引和查询结构,以实现高效的数据处理。
688 1
|
4月前
|
SQL 关系型数据库 MySQL
MySQL】-DQL(基本、条件、分组、排序、分页)详细版
通过这些查询方法,你可以高效地检索、分析和组织MySQL数据库中的数据,以满足各种应用需求。实践中,理解这些SQL语句的基础知识以及它们如何组合起来进行复杂的数据操作是至关重要的。
55 1
|
4月前
|
SQL 关系型数据库 MySQL
在 MySQL 中使用 `GROUP BY` 子句
【8月更文挑战第12天】
132 1
|
4月前
|
存储 关系型数据库 MySQL
MySQL中的DISTINCT与GROUP BY:效率之争与实战应用
【8月更文挑战第12天】在数据库查询优化中,DISTINCT和GROUP BY常常被用来去重或聚合数据,但它们在实现方式和性能表现上却各有千秋。本文将深入探讨两者在MySQL中的效率差异,结合工作学习中的实际案例,为您呈现一场技术干货分享。
554 0
|
5月前
|
SQL 关系型数据库 MySQL
MySQL获取分组里的最新数据如何写sql
MySQL获取分组里的最新数据如何写sql
63 0
|
6月前
|
JSON 关系型数据库 MySQL
MySQL中GROUP_CONCAT与JSON_OBJECT、GROUP BY的巧妙结合:打造高效JSON数组汇总
MySQL中GROUP_CONCAT与JSON_OBJECT、GROUP BY的巧妙结合:打造高效JSON数组汇总
192 1
|
7月前
|
SQL 关系型数据库 MySQL
【MySQL】DQL-分组查询-语法&where与having的区别&注意事项&可cv例题语句
【MySQL】DQL-分组查询-语法&where与having的区别&注意事项&可cv例题语句
【MySQL】DQL-分组查询-语法&where与having的区别&注意事项&可cv例题语句