`
cakin24
  • 浏览: 1330978 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

MySQL GROUP BY 语句

阅读更多

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;

实例演示

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

MariaDB [RUNOOB]> SET NAMES utf8;
Query OK, 0 rows affected (0.00 sec)

MariaDB [RUNOOB]> SET FOREIGN_KEY_CHECKS = 0;
Query OK, 0 rows affected (0.00 sec)

MariaDB [RUNOOB]> DROP TABLE IF EXISTS `employee_tbl`;
Query OK, 0 rows affected, 1 warning (0.00 sec)

MariaDB [RUNOOB]> 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;
Query OK, 0 rows affected (0.04 sec)

MariaDB [RUNOOB]> BEGIN;
Query OK, 0 rows affected (0.00 sec)

MariaDB [RUNOOB]> INSERT INTO employee_tbl VALUES ('1', 'aa', '2016-04-22 15:25:33', '1'), ('2', 'bb', '2016-04-20 15:25:47', '3'), ('3', 'cc', '2016-04-19 15:26:02', '2'), ('4', 'bb', '2016-04-07 15:26:14', '4'), ('5', 'aa', '2016-04-11 15:26:40', '4'), ('6', 'aa', '2016-04-04 15:26:54', '2');
Query OK, 6 rows affected, 6 warnings (0.00 sec)
Records: 6  Duplicates: 0  Warnings: 6

MariaDB [RUNOOB]> COMMIT;
Query OK, 0 rows affected (0.00 sec)

MariaDB [RUNOOB]> SET FOREIGN_KEY_CHECKS = 1;
Query OK, 0 rows affected (0.00 sec)

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

MariaDB [RUNOOB]> select * from employee_tbl;
+----+------+---------------------+--------+
| id | name | date                | singin |
+----+------+---------------------+--------+
|  1 | aa   | 2016-04-22 15:25:33 |      1 |
|  2 | bb   | 2016-04-20 15:25:47 |      3 |
|  3 | cc   | 2016-04-19 15:26:02 |      2 |
|  4 | bb   | 2016-04-07 15:26:14 |      4 |
|  5 | aa   | 2016-04-11 15:26:40 |      4 |
|  6 | aa   | 2016-04-04 15:26:54 |      2 |
+----+------+---------------------+--------+
6 rows in set (0.00 sec)

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

MariaDB [RUNOOB]> SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;
+------+----------+
| name | COUNT(*) |
+------+----------+
| aa   |        3 |
| bb   |        2 |
| cc   |        1 |
+------+----------+
3 rows in set (0.00 sec)

使用 WITH ROLLUP

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

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

MariaDB [RUNOOB]> SELECT name, SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
+------+--------------+
| name | singin_count |
+------+--------------+
| aa   |            7 |
| bb   |            7 |
| cc   |            2 |
| NULL |           16 |
+------+--------------+
4 rows in set (0.00 sec)

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

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

select coalesce(a,b,c);

参数说明:

如果a!=null,则选择a;

如果a==null,则选择b;

如果b==null,则选择c;

如果a b c 都为null ,则返回为null(没意义)。

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

MariaDB [RUNOOB]> SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
+------------------------+--------------+
| coalesce(name, '总数')     | singin_count |
+------------------------+--------------+
| aa                     |            7 |
| bb                     |            7 |
| cc                     |            2 |
| 总数                    |           16 |
+------------------------+--------------+
4 rows in set (0.00 sec)
1
0
分享到:
评论

相关推荐

    MySQL数据库中group by语句与update语句的用法研究.pdf

    MySQL数据库中group by语句与update语句的用法研究.pdf

    MySQL group by语句如何优化

    在MySQL中,新建立一张表,该表有三个字段,分别是id,a,b,插入1000条每个字段都相等的记录,如下: mysql> show create table t1\G *************************** 1. row *************************** Table: t1...

    MySQL 教程 开发文档 从基础到精通

    十二.MySQL 查询数据 十三.MySQL WHERE 子句 十四.MySQL UPDATE 更新 十五.MySQL DELETE 语句 十六.MySQL LIKE 子句 十七.MySQL UNION 操作符 十八.MySQL 排序 十九.MySQL GROUP BY 语句 二十.MySQL 连接的...

    mysql获取group by总记录行数的方法

    本文实例讲述了mysql获取group by总记录行数的方法,分享给大家供大家参考。具体方法分析如下: 一般来说,mysql获取group by内部可以获取到某字段的记录分组统计总数,而无法统计出分组的记录数。 mysql中可以使用...

    Linux运维-运维课程d2-MySQL基本SQL语句(下)-15-GROUP BY子句之统计函数.mp4

    Linux运维-运维课程d2-MySQL基本SQL语句(下)-15-GROUP BY子句之统计函数.mp4

    Mysql中错误使用SQL语句Groupby被兼容的情况

    本文给大家带来了Mysql中错误使用SQL语句Groupby被兼容的情况,及sql的grop by 语句介绍。感兴趣的朋友一起通过本文学习吧

    Linux运维-运维课程d2-MySQL基本SQL语句(下)-16-GROUP BY子句之分组原理与实践.mp4

    Linux运维-运维课程d2-MySQL基本SQL语句(下)-16-GROUP BY子句之分组原理与实

    MySQL利用索引优化ORDER BY排序语句的方法

    创建表&创建索引 ...MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作。 通过索引优化来实现MySQL的ORDER BY语句优化: 1、ORDER BY的索引优化 如果一个SQL语句形如: SELECT

    MySQL中无GROUP BY情况下直接使用HAVING语句的问题探究

    主要介绍了MySQL中无GROUP BY情况下直接使用HAVING语句的问题探究,同时探究了该情况下MAX与MIN功能的使用情况,需要的朋友可以参考下

    10个mysql 数据查询语句.docx

    mysql查询语句汇总 MySQL 是一种常用的关系型数据库管理系统,可以通过 SQL 语言 进行数据的查询和操作。下面列举了 10 个常见的 MySQL 数据查询 ...5. GROUP BY 子句:用于将查询结果按照指定列进行分组。通常

    10个mysql 数据查询语句.7z

    mysql查询语句汇总 MySQL 是一种常用的关系型数据库管理系统,可以通过 SQL 语言 进行数据的查询和操作。下面列举了 10 个常见的 MySQL 数据查询 ...5. GROUP BY 子句:用于将查询结果按照指定列进行分组。通常

    MySQL中distinct语句的基本原理及其与group by的比较

    主要介绍了MySQL中distinct语句的基本原理及其与group by的比较,一般情况下来说group by和distinct的实现原理相近且性能稍好,需要的朋友可以参考下

    mysql group by having 实例代码

    mysql中group by语句用于分组查询,可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表, 经常和having一起使用,需要的朋友可以参考下

    MySQL优化GROUP BY方案

    满足GROUP BY子句的最一般的方法是扫描整个表并创建一个新的临时表,表中每个组的所有行应为连续的,然后使用该临时表来找到组并应用累积函数(如果有)。在某些情况中,MySQL能够做得更好,即通过索引访问而不用创建...

    mysql获取group by的总记录行数另类方法

    mysql获取group by内部可以获取到某字段的记录分组统计总数,而无法统计出分组的记录数。 mysql的SQL_CALC_FOUND_ROWS 使用 获取查询的行数 在很多分页的程序中都这样写: 代码如下 SELECT COUNT(*) from `table` ...

    mysql中count(), group by, order by使用详解

    mysql中order by 排序查询、asc升序、desc降序,group by 分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。

    MySQL中distinct与group by语句的一些比较及用法讲解

    在数据表中记录了用户验证时使用的书目,现在想取出所有书目,用DISTINCT和group by都取到了我想要的结果,但我发现返回结果排列不同,distinct会按数据存放顺序一条条显示,而group by会做个排序(一般是ASC)。...

    MySQL查询语句常见操作语句格式代码.docx

    mysql查询语句汇总 MySQL作为流行的关系型数据库管理系统,其查询语句的灵活性和强大性是它深受欢迎的原因之一。下面,我们将进一步探讨MySQL查询语句的不同方面,从基础查询到高级查询,以...结合GROUP BY子句,可以

    MYSQL GROUP BY用法详解

    现在需要把这些重复的数据删除掉,使用到的语句就是Group By来完成。为了进一步了解这条语句的作用,我打算先从简单入手。 建一个测试表 代码如下:create table test_group(id int auto_increment primary key, ...

Global site tag (gtag.js) - Google Analytics