13、【创业必备企业架构,可开发任意项目】SpringCloud大型企业分布式微服务云架构源码之MySQL 分组

2023-11-16

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;

实例演示

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

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,
  `signin` 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                | signin |
+----+--------+---------------------+--------+
|  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(signin) as signin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
+--------+--------------+
| name   | signin_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(signin) as signin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
+--------------------------+--------------+
| coalesce(name, '总数') | signin_count |
+--------------------------+--------------+
| 小丽                   |            2 |
| 小明                   |            7 |
| 小王                   |            7 |
| 总数                   |           16 |
+--------------------------+--------------+
4 rows in set (0.01 sec)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

13、【创业必备企业架构,可开发任意项目】SpringCloud大型企业分布式微服务云架构源码之MySQL 分组 的相关文章

  • 同一配置文件上的两个不同提供程序

    我在用着实体框架 6 1 0 I have 2 家提供者 MysqlClient 和 SQLServerCE 我需要创建2个不同的DBContext 这迫使我创造2个配置类因为mysql有一些不同的东西 但是当我初始化应用程序时 Datab
  • MySQL:计算日期/时间之间的差异 - 仅在周一至周五“工作周”期间

    我需要计算开始日期 时间和结束日期 时间之间的差异 但是 我只想在 5 天的工作周内执行此操作 不包括周六 周日 做这个的最好方式是什么 我的想法是 从日期开始 我必须获取星期几 如果是工作日 那么我将添加到累加器中 如果不是 那么我不会添
  • 在mysql中的单个查询中更新多个表

    我有三个查询 我想要一个 这是我的查询 UPDATE tab1 SET a WHERE id 3 UPDATE tab2 SET b WHERE id 9 UPDATE tab3 SET c WHERE id 5 您可以尝试下面的代码 UP
  • 如何在mysql中选择具有相同值集的列?

    我的桌子是 patients pid name city disease did dname has disease did pid 我想列出具有相同疾病组的患者 pid 和 did 分别是患者和疾病表中的主键 并且是 has diseas
  • 如何优化这个MySQL慢(非常慢)查询?

    我有一个 2 GB 的 mysql 表 包含 500k 行 我在没有负载的系统上运行以下查询 select from mytable where name in n1 n2 n3 n4 bunch more order by salary
  • Windows 8.1 升级后 Apache 无法工作 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 今天从 Windows 8 升级到 Windows 8 1 后 Apache 不再工作 我上次从 Windows 7 升级到 Window
  • MySQL 通过 current_timestamp 选择上个月的数据

    直到今天 当我使用 MySQL 并需要对日期 时间执行操作时 我使用带有 unix 时间戳的 int 列 没有出现任何问题 但今天在阅读了一些指南后 我决定默认使用 current timestamp 测试时间戳列 所以我感兴趣如何按列选择
  • Google Cloud SQL 在重新启动时卡住

    我的云 sql 实例长时间处于重新启动状态 在操作窗格中 重新启动的状态显示为待处理 并且还发生了导出 其状态仍为Running 有没有办法可以强制重新启动或取消重新启动或从常规备份中恢复数据 不 没有办法 如果您向 Google 支付高级
  • 即使没有结果也返回一个值

    我有这种简单的查询 它返回给定 id 的非空整数字段 SELECT field1 FROM table WHERE id 123 LIMIT 1 问题是如果找不到 id 结果集就是空的 我需要查询始终返回一个值 即使没有结果 我有这个东西工
  • PHP MYSQL文件内容转义问题

    我正在尝试使用 php 将 pdf 文件上传到 mysql 数据库中 除了文件内容之外 一切都很好 无论我如何尝试转义特殊字符 查询总是失败 主要是 未知命令 n 我使用过addslashes mysql real escape strin
  • libmysqlclient.a 和 libmysqlclient_r.a 有什么区别?

    我应该使用哪个来链接 mysqlclient 库 它们之间有什么区别 我似乎找不到答案 谢谢 较新版本的 MySQL 客户端发行版不包含 r 版本 有些可能有从 libmyqslclient r a 到 libmyqslclient a 的
  • PHP 和 MySQL - 高效处理多个一对多关系

    我正在寻求一些有关使用 MySQL 和 PHP 检索和显示数据的最佳方法的建议 我有 3 个表 所有一对多关系如下 Each SCHEDULE有很多覆盖每个覆盖都有很多地点 我想检索这些数据 以便它可以全部显示在单个 PHP 页面上 例如列
  • 无法在 Mac 上启动 MySQL

    使用 Brew 安装后 我无法运行 MySQL 我使用的是 OS X El Capitan 版本 10 11 3 和 MySQL Server 版本 5 7 11 当我启动服务器时 我收到 启动 MySQL 错误 服务器退出而不更新 PID
  • 慢速自动增量重置

    我有很多表 由于某些原因 我需要在应用程序启动时调整这些表的自动增量值 我尝试这样做 mysql gt select max id from item max id 97972232 1 row in set 0 05 sec mysql
  • MySQL中如何声明变量?

    如何在mysql中声明一个变量 以便我的第二个查询可以使用它 我想写一些类似的东西 SET start 1 SET finish 10 SELECT FROM places WHERE place BETWEEN start AND fin
  • 如何在MYSQL中将整个字符串小写并保持第一个大写[重复]

    这个问题在这里已经有答案了 我的表栏目 我预期的输出会在列中发生变化 Smith Allen Doyle Dennis Baker Waker 这是我尝试过的 但不起作用 UPDATE TABLE employee SET last nam
  • posts_search 中的自定义查询

    如何使用此查询作为我的自定义搜索查询 add filter posts search my search is perfect 20 2 function my search is perfect search wp query sWord
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • 快速将列的副本添加到 MySQL 表

    我需要一种快速的方法来复制表中的 DATETIME 列并为其指定一个新名称 我的表中有一个名为 myDate 的列 名为 myResults 我需要一个查询来在名为 newDate 的表中创建一个新列 该列的数据与 myDate 列完全相同
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主

随机推荐

  • 2021年蓝桥杯Python常见考点【持续更新ing】

    目录 一 常用技巧 一 输入输出 1 一行输入数值 2 多行输入 二 列表 1 存储多行 用 2 从多行数字 转变为二维列表 3 怎样将以下列表转化为整数 三 元组 四 集合 二 常见内置函数 一 itertools 二 数学函数 三 数据
  • Redis主从复制与Redis集群

    Redis主从复制与Redis集群 前言 一 主从复制 1 是什么 2 能干嘛 3 怎么玩 主从复制 4 新建redis conf配置文件 5 主从集群常用3种 1 主从模式一 一主二从 2 主从模式二 薪火相传 3 主从模式三 反客为主
  • Python循环的技巧

    Python的for循环是coder最常用的语句之一 如果只是简单地对容器循环遍历 那便会少了很多美好的体验 像下面这样 for i in range 10 print i python提供了很多用于循环的技巧 这些方法能让代码更加简洁美观
  • [Linux] 输入命令ls -laF后的各字段含义解析

    在登陆Ubuntu之后 我们切换超级管理用户root su root 然后切换到其所在的主目录 cd 然后以该目录下的所有文件以及文件夹为例进行介绍 我们输入命令查看该目录下面的所有文件以及文件夹 包括隐藏文件 ls laF 然后显示的内容
  • 回调函数使用

    https www cnblogs com shenwen p 9046482 html
  • 用c语言简单实现通讯录(详解和具体代码)

    前言 一 明确通讯录的功能 1 查找通讯录上的姓名 性别 电话和住址 2 可以增加 删除或修改相关信息 二 如何实现通讯录的功能 1 使用struct函数 2 实现通讯录的步骤 1 初始化通讯录并打印目录 2 实现增加信息与展示通讯录 3
  • [ 注意力机制 ] 经典网络模型2——CBAM 详解与复现

    Author Horizon Max 编程技巧篇 各种操作小结 机器视觉篇 会变魔术 OpenCV 深度学习篇 简单入门 PyTorch 神经网络篇 经典网络模型 算法篇 再忙也别忘了 LeetCode 注意力机制 经典网络模型2 CBAM
  • mysql导出数据为文本,MySQL 文本文件的导入导出数据的方法

    搜索热词 MysqL写入数据通常用insert语句 如 insert into person values 张三 20 李四 21 王五 70 但有时为了更快速地插入大批量数据或交换数据 需要从文本中导入数据或导出数据到文本 一 建立测试表
  • 【TensorFlow】TensorBoard的使用(一)

    概述 TensorBoard是一个可视化工具 它可以用来展示网络图 张量的指标变化 张量的分布情况等 特别是在训练网络的时候 我们可以设置不同的参数 比如 权重W 偏置B 卷积层数 全连接层数等 使用TensorBoader可以很直观的帮我
  • 关于spring integration jpa 使用druid 连接池 不可恢复问题排查

    背景 2023年6月10日 测试说生产环境报错 有个job 没执行 我打开服务就报如下错 却看不到代码在哪报错 由于比较忙 直接暴力重启了应用 问题解决 2023年6月17日 测试说生产环境报错 有个job 又没执行 依旧是如上的错 等我有
  • 使用exe4j打包exe

    首先 需要下载一个exe4j的软件 网址 http www softpedia com get Authoring tools Setup creators exe4j shtml 现在主要说一下怎么打exe的过程 1 打开安装好的exe4
  • unity新动画系统之IK动画

    国际惯例 先来一段说明 IK动画全称Inverse Kinematics 即反向动力学 牵一发而动全身的既视感 代码如下 using System Collections using System Collections Generic u
  • Mac使用工具tree,打印项目目录树到Markdown

    主要使用tree这个工具 安装方法 brew install tree 使用方法是 tree 参数 目录 常用方法 显示当前目录及子目录结构 tree 只显示目录 不显示文件 tree d 保存打印的结果到文件 tree gt my pro
  • Python安装包的三种方式: pip在线安装、setup.py安装、whl文件安装

    之前在自己电脑上一直用 pip instal xx 来安装python的包 后来因为公司电脑的网络连接限制 无法通过正常联网的方式安装 所以总结了几种在线 或 离线安装包的方式 具体如下 在线安装 pip install xx 正常在线安装
  • Android android:configChanges的简介

    AndroidManifest xml 文件中 在声明Activity时 会有这样一个属性设置 即 android configChanges 现在就来简单介绍下吧 程序在运行时 一些设备的配置可能会改变 如 横竖屏的切换 键盘的可用性等
  • cannot find -lstdc++解决方案

    今天在ubuntu12 10 64位下编译32位android 4 04源码时报错 usr bin ld skipping incompatible usr lib gcc x86 64 linux gnu 4 5 4 libstdc so
  • Linux:进程(概念)

    学习目标 1 认识冯诺依曼系统 2 认识操作系统概念与定位 系统调用接口 3 理解进程的概念 PCB 4 理解进程的状态 fork创建进程 僵尸进程及孤儿进程 5 了解进程的调度 优先级 竞争性 独立性 并行 并发 6 理解环境变量 熟悉常
  • bert结构模型的转换及[unusedxx]的不拆token

    这里写自定义目录标题 前沿 torch格式转onnc 方法1 方法2 保留 unused9 不分词 transformers模块 tensorflow模块 前沿 业界主流的模型结构包括tensorflow和pytorch 很多时候两者的模型
  • 北斗导航系统伪码定位原理,MATLAB迭代法求解

    用户到卫星的距离可以先简单理解成通过光速 时间差得到 而用户测得的是包含各种误差影响在内的距离 称之为伪距 这是伪距 是用户机钟差 加上用户三维坐标 共四个未知量 所以需要至少同时看到四颗卫星才能实现定位 设用户坐标是 X Y Z 三颗卫星
  • 13、【创业必备企业架构,可开发任意项目】SpringCloud大型企业分布式微服务云架构源码之MySQL 分组

    MySQL GROUP BY 语句 GROUP BY 语句根据一个或多个列对结果集进行分组 在分组的列上我们可以使用 COUNT SUM AVG 等函数 GROUP BY 语法 SELECT column name function col