SQL学习(汇总数据和分组数据)

第10课 SQL入门之分组数据 如何使用GROUP BY子句对多组数据进行汇总计算,返回每个组的结果。我们看到了如何使用HAVING子句过滤特定的组,还知道了ORDER BY和GROUP BY之间以及WHERE和HAVING之间的差异 阅读详情

聚集函数

我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提供了专门的函数。使用这些函数,MySQL查询可用于数据检索,以便分析和报表生成。

聚集函数:运行在行组上,计算和返回单个值的函数。
SQL聚集函数
AVG()通过对表中的行数计数并计算特定列值之和,求得该列的平均值。AVG()可用来返回所有列的平均值,也可以返回特定列或行的平均值。

mysql> SELECT AVG(prod_price) AS avg_price FROM products;
+-----------+
| avg_price |
+-----------+
| 16.133571 |
+-----------+
1 row in set (0.00 sec)

COUNT()函数

COUNT()函数进行计数。可利用COUNT()确定表中行的数目或符合特定条件的行的数目。
COUNT()函数有两种使用方式。

  • 使用COUNT(*)对表中的数目进行计数,不管表列中包含的是空值(NULL)
    还是非空值。
  • 使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。
mysql> SELECT COUNT(*) AS num_cust FROM customers;
+----------+
| num_cust |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(cust_email) AS num_cust FROM customers;
+----------+
| num_cust |
+----------+
|        3 |
+----------+
1 row in set (0.00 sec)

MAX()函数

MAX()返回指定列中的最大值。MAX()要求指定列名

mysql> SELECT MAX(prod_price) AS max_perice FROM products;
+------------+
| max_perice |
+------------+
|      55.00 |
+------------+
1 row in set (0.00 sec)

MIN()函数

MIN()的功能正好与MAX()功能相反,它返回指定列的最小值。

mysql> SELECT MIN(prod_price) AS max_perice FROM products;
+------------+
| max_perice |
+------------+
|       2.50 |
+------------+zong'ji
1 row in set (0.00 sec)

SUM()函数

SUM()用来返回指定列值的和(总计)。

mysql> SELECT SUM(quantity) AS items_ordered FROM orderitems WHERE order_num = 20005;
+---------------+
| items_ordered |
+---------------+
|            19 |
+---------------+
1 row in set (0.00 sec)

聚集不同的值

以上5个聚集函数可以如下使用:

  • 对所有的行执行计算,指定ALL参数或不给参数
  • 只包含不同的值,指定DISTINCT参数。
mysql> SELECT AVG(DISTINCT prod_price) as AVG_PRICE FROM products WHERE vend_id = 1003;
+-----------+
| AVG_PRICE |
+-----------+
| 15.998000 |
+-----------+
1 row in set (0.00 sec)

组合聚集函数

SELECT可根据需要包含多个聚集函数。

mysql> select COUNT(*) AS num_items, MIN(prod_price) AS price_min,MAX(prod_price) AS price_max,AVG(prod_price) AS price_avg FROM products;
+-----------+-----------+-----------+-----------+
| num_items | price_min | price_max | price_avg |
+-----------+-----------+-----------+-----------+
|        14 |      2.50 |     55.00 | 16.133571 |
+-----------+-----------+-----------+-----------+
1 row in set (0.00 sec)

数据分组

分组允许把数据分为多个逻辑组,以便能对每个组进行聚集计算。

创建分组

分组是在SELECT语句的GROUP BY子句中建立的。

mysql> SELECT vend_id,COUNT(*) AS num_prods FROM products GROUP BY vend_id;
+---------+-----------+
| vend_id | num_prods |
+---------+-----------+
|    1001 |         3 |
|    1002 |         2 |
|    1003 |         7 |
|    1005 |         2 |
+---------+-----------+
4 rows in set (0.00 sec)

上面的SELECT语句指定了两个列,vend_id包含产品供应商的ID,num_prods为计算字段(用COUNT(*)函数建立)。GROUP BY子句指示MySQL按vend_id拍寻分组数据。这导致对每个vend_id而不是整个表计算num_prods一次。

  • GROUP BY子句可以包含任意数目的列。这使得能对分组进行嵌套,为数据分组提供更细致的控制。
  • 如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算(所以不能从个别的列取回数据)。
  • GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。
  • 除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出。
  • 如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组。
  • GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。

过滤分组

MySQL允许过滤分组,规定包括哪些分组,排除哪些分组。我们知道了WHERE子句的作用,但是在这个例子中WHERE不能完成任务,因为WHERE过滤指定的是行而不是分组。事实上,WHERE没有分组的概念。MySQL为此目的提供了另外的子句,那就是HAVING子句。目前为止所学过的所有类型的WHERE子句都可以用HAVING来替代。唯一的差别是WHERE过滤行,而HAVING过滤分组。

mysql> SELECT cust_id,COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >=2 ;
+---------+--------+
| cust_id | orders |
+---------+--------+
|   10001 |      2 |
+---------+--------+
1 row in set (0.00 sec)

mysql> SELECT vend_id,COUNT(*) AS num_Prods FROM products WHERE prod_price >= 10 GROUP BY vend_id HAVING COUNT(*) >= 2;
+---------+-----------+
| vend_id | num_Prods |
+---------+-----------+
|    1003 |         4 |
|    1005 |         2 |
+---------+-----------+
2 rows in set (0.00 sec)

mysql> SELECT vend_id,COUNT(*) AS num_Prods FROM products  GROUP BY vend_id HAVING COUNT(*) >= 2; 
+---------+-----------+
| vend_id | num_Prods |
+---------+-----------+
|    1001 |         3 |
|    1002 |         2 |
|    1003 |         7 |
|    1005 |         2 |
+---------+-----------+
4 rows in set (0.01 sec)
分组和排序

虽然GROUP BY和ORDER BY经常完成相同的工作,但它们是非常不同的。
ORDER BY与GROUP BY
我们发现用GROUP BY分组的数据确实是以分组顺序输出,但情况并不是这样,他并不是SQL规范所要求的。此外,用户也可能会要求以不同于分组的顺序排序,仅因你以某种方式分组数据,并不表示你需要以相同的方式排序输出。应该提供明确的ORDER BY子句,即使其效果等同于GROUP BY子句也是如此。

mysql> SELECT order_num, SUM(quantity*item_price) AS ordertotal FROM orderitems GROUP BY order_num HAVING SUM(quantity*item_price) >= 50;
+-----------+------------+
| order_num | ordertotal |
+-----------+------------+
|     20005 |     149.87 |
|     20006 |      55.00 |
|     20007 |    1000.00 |
|     20008 |     125.00 |
+-----------+------------+
4 rows in set (0.00 sec)

mysql> SELECT order_num, SUM(quantity*item_price) AS ordertotal FROM orderitems GROUP BY order_num HAVING SUM(quantity*item_price) >= 50 ORDER BY ordertotal;
+-----------+------------+
| order_num | ordertotal |
+-----------+------------+
|     20006 |      55.00 |
|     20008 |     125.00 |
|     20005 |     149.87 |
|     20007 |    1000.00 |
+-----------+------------+
4 rows in set (0.00 sec)

SELECT子句顺序

在这里插入图片描述在这里插入图片描述

sql2000分组统计 delphi写的 sql2000分组统计 立即下载

相关推荐

SqlServer,将多行记录按分组信息一行显示

SqlServer将多行记录按分组信息一行显示

SQL分组查询数据

我们在生活中会碰到不少分组的情况,比如常见的根据性别来分组,男的一组,女的一组,所以在SQL中也可以对数据进行分组,这样可以更加便利的操作数据 1.Group By 语句 Group By 从字面意义上理解就是根据“By”指定的条件对数据进行分组,所谓的分组就是将一个“数据集” 划分成若干个“小区域”,然后针 对若干个“小区域”进行数据处理,你也可以想象成将数据分成多个集合。 以下是 GROUP BY 子句的语法: Select T1.ID from Table T1 Group By T1.ID

chnejgeo的博客 1万+

从零开始:用摩尔线程S4000运行开源AI项目的完整流程

本文详细介绍了如何使用摩尔线程S4000 GPU从零开始运行开源AI项目的完整流程,包括硬件选择、驱动安装、容器化环境配置以及典型AI项目的实战部署。通过性能优化技巧,显著提升推理速度,适合开发者快速上手国产GPU的AI应用开发。

weixin_29231725的博客 579

SQL 过滤分组

        两个新SELECT语句子句:GROUP BY子句和HA VING子句。       目前为止的所有计算都是在表的所有数据或匹配特定的WHERE子句的数据上进行的。比如下面的例子返回供应商DLL01提供的产品数目:输入▼SELECT COUNT(*) AS num_prods FROM Products WHERE vend_id = 'DLL01';输出▼num_prods --...

GUI1259802368的博客 1318

量化交易新手入门:从零开始搭建你的第一个Python交易策略(附完整代码)

本文为量化交易新手提供从零开始搭建Python双均线策略的完整指南,涵盖环境配置、数据获取、策略实现及风险管理等关键步骤。通过详细的代码示例和实践建议,帮助读者快速掌握量化交易的核心技术,并避免常见陷阱。文章特别强调Python在量化交易中的技术革新优势,适合希望进入金融科技领域的初学者。

weixin_26905487的博客 443

简化神经元模型6 -- Hindmarsh-Rose Model

简化神经元模型 6 Hindmarsh-Rose Model

weixin_73557167的博客 1425

SQL - 汇总与分组

【代码】SQL - 汇总与分组。

心如冰清,天塌不惊 925

Android SDK 国内镜像及配置方法(2025最新,包好使!)

android sdk 国内镜像配置方法,纯小白避坑指南,2025最新,亲测包好使!还有包奉上!

土豆是狗的博客 4672

sql 分组求和_七天学会SQL-03SQL汇总分析

一、汇总分析常用的汇总分析函数有下面几种。例如从成绩表中查询成绩求和(所用数据表在第一课已共享)select sum(成绩) from score;从成绩表中查询成绩平均值select avg(成绩) from score;从成绩表查询成绩最大值和最小值select max(成绩),min(成绩) from score;二、分组SQL分组:group byselect 性别,count(*) f...

weixin_39932455的博客 1470

LVGL在RTOS下的线程安全实践:从卡死到流畅的界面切换

本文探讨LVGL在RTOS环境下的线程安全实践,重点分析FreeRTOS多任务同步机制,包括互斥锁、任务通知和消息队列方案。通过实际案例展示如何避免界面卡顿和系统死锁,实现从卡死到流畅的界面切换,为嵌入式GUI开发提供可靠的适配解决方案。

uran的专栏 1111

论文必备 - YOLO26热力图可视化,支持指定模型,指定显示层,设置置信度,以及9种可视化实现方式

本文带来的是YOLO26热力图可视化功能,支持指定模型,指定显示层,设置置信度,以及9种可视化实现方式。我们经常看到一些论文里绘制了不同的热力图,一方面能够直观的感受其模型的有效性,另一方面也丰富了论文内容。特别是在使用了注意力模块的网络中,热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上,以便对模型的有效性和合理性进行评估。例如Centralized Feature Pyramid for Object Detection这篇文章中展示的,就很能够表达作者改进后的模型相比之前模型的优越性。在项目

Limiiiing的博客 429

霸榜18年,作者连续20年获得微软MVP,这本SQL书凭什么成为畅销经典

说到 SQL ,大多数人都不陌生,不管你是 Java 、C++ 还是 .NET 开发人员,工作中你都要编写 SQL 查询。由于数据库是现代 Java 或者 Web 应用程序中不可或缺的组...

图灵教育 469

推荐系统(十六):基于ESMM的商品召回/推荐系统

ESMM(Entire Space Multi-Task Model)是阿里巴巴提出的多任务学习框架,通过联合建模点击率(CTR)和点击转化率(CVR)解决传统CVR模型样本稀疏问题。其核心思想是将 CVR 定义为 CTR 与 CTCVR 的条件概率,模型包含两个子任务。

Jin_Kwok的博客 1265

sql去掉百分号_小白学SQL-《SQL必知必会》学习

写在开头:1.文章主要内容为书本代码,供初学or复习使用;2.文章大致遵循书本框架,代码是本人第一遍学习时手敲(Mysql+Navicat),建议初学者可以自己手敲一遍;正文包括二部分:书各章节代码(sql查询)、创建表及数据的代码第一部分:书各章节代码#第二课 检索数据#2.2 检索单个列SELECT prod_name FROM products;#2.3 检索多个列 SELECT pro...

weixin_39732609的博客 1121

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SQL的基础知识

系列文章目录 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录SQL基础操作1 前言2 概述2.1 创建和操纵表2.1.1 创建表语法2.1.2 更新表2.1.3 重命名表2.1.4 删除表2.2 检索数据2.2.1 检索单列2.2.2 检索多列2.2.3 检索所有列2.2.4 检索不同值2.2.5 限制结果2.3 数据排序2.4 过滤数据2.4.1 使用**where**子句2.4.2 where子句操作符2.4.3 使用通配符进行过滤2.5 创建计算字段2.5.

SlagSea 1561

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SQL知识点.txt

一、查询 SELECT prod_name, prod_id FROM Products; 二、排序 SELECT prod_id, prod_name FROM Products ORDER BY prod_id, prod_name DESC; 三、过滤 SELECT prod_id, prod_name FROM Products WHERE prod_price BETWEEN 5 AND 10 ORDER BY prod_id DESC, prod_name; 四、高级过滤 1 SELECT pr

Zerore的博客 1210

SQL 必知必会 Chapter 10 —— 分组数据

typora-copy-images-to: SQL 必知必会 文章目录typora-copy-images-to: SQL 必知必会SQL 必知必会 Chapter 10 分组数据10.1 数据分组10.2 创建分组10.3 过滤分组10.4 分组和排序10.5 SELECT 子句顺序10.6 小结 SQL 必知必会 Chapter 10 分组数据 10.1 数据分组 介绍如何分组数据,...

Jame Lu 的博客 1144

SQL必知必会(二) 计算字段、函数、汇总数据、分组数据、子查询

七、创建计算字段计算字段(field) 基本上与列的意思一样,经常互换使用。 在数据中完成需要转换和格式化工作,会比客户端快很多。 拼接(concatenate)字段 Access和SQL server使用+号,DB2、Oracle、PostgreSQL、SQLite和Open Office Base使用 || SELECT vend_name + '(' + vend_country +

lcj1105的专栏 1696

7.2 分组数据

本专栏涵盖了SQL的基本概念、数据定义、数据操作、数据查询、数据优化以及在不同数据库系统中的SQL应用等多个方面。本专栏的内容基于SQL的通用概念和多个流行的数据库系统,如MySQL、PostgreSQL、SQL Server和Oracle。虽然不同的数据库系统可能会有细微的差别,但SQL的核心概念和语法是一致的。在这个数据驱动的时代,SQL作为最流行的数据库查询和编程语言之一,对于任何与数据打交道的专业人士来说都是一项必不可少的技能。此外,测试不同的分组策略和优化索引使用,可以提高分组操作的效率和效果。

Python老吕的博客 1617

SQL中的分组数据

本文讲述了如何使用GROUP BY子句对多组数据进行汇总计算,返回每个组的结果。我们看到了如何使用HAVING子句过滤特定的组,还知道了ORDER BY和GROUP BY之间以及WHERE和HAVING之间的差异。

欢迎来到我的博客。 2361

SQL语句进阶学习一(where、通配符、正则表达式、计算字段、数据处理函数、分组数据)

SQL语句进阶学习MYSQL的基本概念主键(primary key):其值能够区分表中的每一行sql(strutured query language)过滤数据where子句操作符1.检查单个值2.不匹配检查3.范围值检查4.or和and同时存在的情况注意事项:计算次序,当and和or同时在场时,先执行and的语句再执行or的语句5.in操作符两者的差别not语句通配符进行过滤百分号(%)通配符,...

codesweetpotato的博客 2017

第7天-sql汇总与分组数据

一、汇总数据我们经常需要汇总数据而不用把它们实际检索出来,为此sql提供了专门的函数。聚集函数为了方便数据汇总,sql给出了5个聚集函数,与前面的数据处理函数不同,sql的聚集函数得到了主要sql实现相当一值的支持。 函数 说明 AVG() 返回某列的平均值 COUNT() 返回某列的行数 MAX() 返回某列的最大值 MIN() 返回某列的最小值 SUM(

_明灭的专栏 1268

《MySQL必知必会》学习笔记——汇总数据、分组数据

文章目录第12章 汇总数据1. 聚集函数1.1 AVG()函数1.2 COUNT()函数1.3 MAX()函数1.4 MIN()函数1.5 SUM()函数2. 聚集不同值3. 组合聚集函数第13章 分组数据 第12章 汇总数据 1. 聚集函数 我们经常需要汇总数据而不用把它们实际检索出来。这种类型的检索例子有以下几种。 确定表中行数(或者满足某个条件或包含某个特定值的行数) 获得表中行组的和 找出表列(或所有行或某些特定的行)的最大值、最小值和平均值 聚集函数: 运行在行组上,计算和返回单个值的函数

qq_42325416的博客 297

SQL第10课——分组数据

group by 子句按照order_num分组数据,以便count(*)函数能够返回每个订单中的物品数目,having子句过滤数据,使得只返回包含三个或更多物品的订单,最后使用order by子句排序输出。group by分组的数据虽然带有一定的顺序输出的,但是不是特意的,不具有排序的功能,所以对输出的结果需要满足一定的顺序输出的话,需要设定order by子句。一般在使用group by子句时候,应该也给出order by子句,保证数据正确排序的唯一方法。如何分组数据,方便汇总表内容的子集。

m0_47482290的博客 905

SQL--分组数据

SQL的分组数据 group by , having

weixin_44048035的博客 543
上一篇: SQL学习(创建计算字段)
下一篇: SQL学习(使用子查询)
Cengineering
博客等级 码龄13年 51粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值