您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

MySQL中分组查询

时间:2019-11-01 10:47:19  来源:  作者:
MySQL中分组查询

 

GROUP BY 语句根据一个或多个列对结果集进行分组。

在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

GROUP BY 语法

SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

实例演示

本章节实例使用到了以下表结构及数据,使用前我们可以先将以下数据导入数据库中。

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for `employee_tbl`
-- ----------------------------
DROP TABLE IF EXISTS `employee_tbl`;
CREATE TABLE `employee_tbl` (
 `id` int(11) NOT NULL,
 `name` char(10) NOT NULL DEFAULT '',
 `date` datetime NOT NULL,
 `singin` tinyint(4) NOT NULL DEFAULT '0' COMMENT '登录次数',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of `employee_tbl`
-- ----------------------------
BEGIN;
INSERT INTO `employee_tbl` VALUES ('1', '小明', '2016-04-22 15:25:33', '1'), ('2', '小王', '2016-04-20 15:25:47', '3'), ('3', '小丽', '2016-04-19 15:26:02', '2'), ('4', '小王', '2016-04-07 15:26:14', '4'), ('5', '小明', '2016-04-11 15:26:40', '4'), ('6', '小明', '2016-04-04 15:26:54', '2');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;

导入成功后,执行以下 SQL 语句:

MySQL> set names utf8;
mysql> SELECT * FROM employee_tbl;
+----+--------+---------------------+--------+
| id | name | date | singin |
+----+--------+---------------------+--------+
| 1 | 小明 | 2016-04-22 15:25:33 | 1 |
| 2 | 小王 | 2016-04-20 15:25:47 | 3 |
| 3 | 小丽 | 2016-04-19 15:26:02 | 2 |
| 4 | 小王 | 2016-04-07 15:26:14 | 4 |
| 5 | 小明 | 2016-04-11 15:26:40 | 4 |
| 6 | 小明 | 2016-04-04 15:26:54 | 2 |
+----+--------+---------------------+--------+
6 rows in set (0.00 sec)

接下来我们使用 GROUP BY 语句 将数据表按名字进行分组,并统计每个人有多少条记录:

mysql> SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;
+--------+----------+
| name | COUNT(*) |
+--------+----------+
| 小丽 | 1 |
| 小明 | 3 |
| 小王 | 2 |
+--------+----------+
3 rows in set (0.01 sec)

使用 WITH ROLLUP

WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。

例如我们将以上的数据表按名字进行分组,再统计每个人登录的次数:

mysql> SELECT name, SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP;
+--------+--------------+
| name | singin_count |
+--------+--------------+
| 小丽 | 2 |
| 小明 | 7 |
| 小王 | 7 |
| NULL | 16 |
+--------+--------------+
4 rows in set (0.00 sec)

其中记录 NULL 表示所有人的登录次数。

我们可以使用 coalesce 来设置一个可以取代 NUll 的名称,coalesce 语法:

select coalesce(a,b,c);

参数说明:如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。

以下实例中如果名字为空我们使用总数代替:

mysql> SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP;
+--------------------------+--------------+
| coalesce(name, '总数') | singin_count |
+--------------------------+--------------+
| 小丽 | 2 |
| 小明 | 7 |
| 小王 | 7 |
| 总数 | 16 |
+--------------------------+--------------+
4 rows in set (0.01 sec)


Tags:MySQL   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除,谢谢。
▌相关推荐
前言在之前我们已经讲解了一主一从,双主双从的mysql集群搭建,在单机应用的时候看起来没有问题,但是在企业的生产环境中,在很多情况下都会有复制延迟的问题。所以我来了!!!​ 主从复...【详细内容】
2021-07-15  Tags: MySQL  点击:(2)  评论:(0)  加入收藏
集群服务部署1、配置主库映射文件 键名mysqld.cnf## The Percona Server 5.7 configuration file.### * IMPORTANT: Additional settings that can override those from...【详细内容】
2021-07-15  Tags: MySQL  点击:(3)  评论:(0)  加入收藏
一、开启IIS全部功能。二、部署PHP1.官网下载并解压PHP: https://windows.php.net/downloads/releases/2.将php.ini-development文件改为php.ini3.修改php.ini(1)去掉注释,并修...【详细内容】
2021-07-15  Tags: MySQL  点击:(3)  评论:(0)  加入收藏
数据库MYSQL的查询一、单表查询1、条件查询select *from test where name='libai'①查询名字为李白且年龄为18:select *from test where name='libai' and a...【详细内容】
2021-07-14  Tags: MySQL  点击:(3)  评论:(0)  加入收藏
这篇文章主要给大家介绍了关于MySQL 8.0新特性之隐藏字段的相关资料,文中通过示例代码介绍得非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编...【详细内容】
2021-07-12  Tags: MySQL  点击:(3)  评论:(0)  加入收藏
【目标】本文介绍了MySQL数据库命令规范、数据库基本设计规范、数据库字段设计规范、索引设计规范、常见索引列建议、如何选择索引列的顺序、以及数据库SQL开发规范等。一...【详细内容】
2021-07-08  Tags: MySQL  点击:(3)  评论:(0)  加入收藏
安装mysqlsudo apt-get updatesudo apt-get install mysql-server输出:Reading package lists... DoneBuilding dependency treeReading state information... DoneThe follo...【详细内容】
2021-07-05  Tags: MySQL  点击:(10)  评论:(0)  加入收藏
1 背景介绍我们在数据库运维的过程中.会遇到不同版本的数据库部署需求.同时测试环境数据库需求更是不同.有时为了节省资源.我们需要进行多实例的部署.或者在我们自己学习的...【详细内容】
2021-07-05  Tags: MySQL  点击:(10)  评论:(0)  加入收藏
为什么需要索引? 一句话概括:索引的出现其实就是为了提高数据查询的效率。一、索引常见模型模型: 哈希表、有序数组和搜索树哈希表 哈希表是一种以键 - 值(key-value)存储数据的...【详细内容】
2021-07-04  Tags: MySQL  点击:(12)  评论:(0)  加入收藏
不想把mysql端口暴露在公网?在naviCat里可以通过ssh连接mysql。连接设置: 使用SSH通道,主机名或IP地址填写该mysql服务器地址 验证方式:公钥。注:在此之前,需要在服务器上设置好用...【详细内容】
2021-07-03  Tags: MySQL  点击:(5)  评论:(0)  加入收藏
▌简易百科推荐
前言在之前我们已经讲解了一主一从,双主双从的mysql集群搭建,在单机应用的时候看起来没有问题,但是在企业的生产环境中,在很多情况下都会有复制延迟的问题。所以我来了!!!​ 主从复...【详细内容】
2021-07-15  灯灯灯灯111    Tags:主从复制   点击:(2)  评论:(0)  加入收藏
集群服务部署1、配置主库映射文件 键名mysqld.cnf## The Percona Server 5.7 configuration file.### * IMPORTANT: Additional settings that can override those from...【详细内容】
2021-07-15  富集云科技有限公司    Tags:Rancher   点击:(3)  评论:(0)  加入收藏
数据库MYSQL的查询一、单表查询1、条件查询select *from test where name='libai'①查询名字为李白且年龄为18:select *from test where name='libai' and a...【详细内容】
2021-07-14  切勿按键伤人    Tags:MYSQL   点击:(3)  评论:(0)  加入收藏
这篇文章主要给大家介绍了关于MySQL 8.0新特性之隐藏字段的相关资料,文中通过示例代码介绍得非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编...【详细内容】
2021-07-12  开心一刻成长每一天    Tags:MySQL   点击:(3)  评论:(0)  加入收藏
一、目前数据库服务器情况概述两台数据库服务器,分别为主、备数据库服务器,已做数据库镜像,数据实时同步,保证数据一致性;当主服务器故障时,可以在10秒钟内自动切换至备用数据库服...【详细内容】
2021-07-09  网络管理员老高    Tags:数据库   点击:(6)  评论:(0)  加入收藏
【目标】本文介绍了MySQL数据库命令规范、数据库基本设计规范、数据库字段设计规范、索引设计规范、常见索引列建议、如何选择索引列的顺序、以及数据库SQL开发规范等。一...【详细内容】
2021-07-08  程序不就是0和1    Tags:数据库运维   点击:(3)  评论:(0)  加入收藏
安装mysqlsudo apt-get updatesudo apt-get install mysql-server输出:Reading package lists... DoneBuilding dependency treeReading state information... DoneThe follo...【详细内容】
2021-07-05  爱玩的安哥    Tags:Mysql5.7   点击:(10)  评论:(0)  加入收藏
1 背景介绍我们在数据库运维的过程中.会遇到不同版本的数据库部署需求.同时测试环境数据库需求更是不同.有时为了节省资源.我们需要进行多实例的部署.或者在我们自己学习的...【详细内容】
2021-07-05  智明杂谈  今日头条  Tags:MySQL   点击:(10)  评论:(0)  加入收藏
为什么需要索引? 一句话概括:索引的出现其实就是为了提高数据查询的效率。一、索引常见模型模型: 哈希表、有序数组和搜索树哈希表 哈希表是一种以键 - 值(key-value)存储数据的...【详细内容】
2021-07-04  Java架构师联盟  今日头条  Tags:MySQL   点击:(12)  评论:(0)  加入收藏
不想把mysql端口暴露在公网?在naviCat里可以通过ssh连接mysql。连接设置: 使用SSH通道,主机名或IP地址填写该mysql服务器地址 验证方式:公钥。注:在此之前,需要在服务器上设置好用...【详细内容】
2021-07-03  老IT的技术生活  今日头条  Tags:Mysql   点击:(5)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条