分组及聚集函数的使用(全部-20140411)
- 格式:doc
- 大小:36.00 KB
- 文档页数:2
集合函数的基础知识及其应用随着时代的发展,数据分析越来越成为企业决策的基础。
在数据分析中,集合函数是非常重要的一部分,它可以帮助我们对数据进行存储、统计、处理等操作。
本文将介绍集合函数的基础知识及其应用。
一、什么是集合函数集合函数,是指在一个数据集上运行的函数,返回单个值作为结果的函数。
它是对数据进行统计和汇总的函数,可以对数据进行聚合操作。
常见的集合函数有 COUNT、SUM、AVG、MIN、MAX 等。
二、COUNT 函数COUNT 函数返回被统计的数据集中的行数。
该函数常用于计算表格中的记录数。
例如,我们有一个表格,里面包含了多个员工的信息。
如果我们想知道表格中的员工数量,可以使用 COUNT 函数来统计。
例如命令如下:SELECT COUNT(*) FROM employees;其中 * 表示所有的列。
三、SUM 函数SUM 函数用于计算统计数据集中某一列的总和。
该函数常用于计算表格中某个字段的总和。
例如,我们有一个表格,里面存储了多个商品的销售情况。
如果我们想知道某个商品的销售总额,可以使用 SUM 函数来统计。
例如命令如下:SELECT SUM(sales) FROM products WHEREproduct_name='coffee';其中,sales 是数据集中需要统计的列,product_name 是商品名称,'coffee' 是需要统计销售总额的商品名称。
四、AVG 函数AVG 函数用于计算统计数据集中某一列的平均值。
该函数常用于计算表格中某个字段的平均值。
例如,我们有一个表格,里面存储了多个商品的销售情况。
如果我们想知道某个商品的平均销售额,可以使用 AVG 函数来统计。
例如命令如下:SELECT AVG(sales) FROM products WHEREproduct_name='coffee';其中,sales 是数据集中需要统计的列,product_name 是商品名称,'coffee' 是需要计算平均销售额的商品名称。
Excel使用技巧利用函数进行数据分组与汇总Excel使用技巧:利用函数进行数据分组与汇总在日常办公中,Excel是一款功能强大的电子表格软件,被广泛应用于数据处理、分析和汇总方面。
为了更加高效地处理大量数据,我们可以运用Excel中的函数,通过数据分组与汇总功能,快速地将复杂数据进行整理和呈现。
本文将介绍一些利用Excel函数进行数据分组与汇总的技巧,帮助你更好地利用Excel进行数据处理。
一、数据分组技巧1. 按照某一列值进行分组Excel提供了一个非常实用的功能——“排序与筛选”,可以帮助我们将数据按照某一列值进行分组。
具体操作是:选中需要分组的列,点击“数据”选项卡中的“排序与筛选”,选择“高级”。
在弹出的对话框中,选择“将数据区域分成组并排序”,然后选中需要分组的列,点击“确定”即可。
通过此方法,我们可以迅速将数据按照某一列的值进行分组,方便后续汇总和统计。
2. 利用数据透视表进行分组除了“排序与筛选”,Excel还提供了另一个强大的功能——“数据透视表”。
通过数据透视表,我们可以快速地对数据进行分组、汇总和透视分析。
具体操作是:选中需要制作数据透视表的数据区域,点击“插入”选项卡中的“数据透视表”。
在弹出的对话框中,选中需要分组的列,并将其拖放到“行标签”区域或“列标签”区域,然后选择需要进行汇总的列并将其拖放到“值”区域。
最后点击“确定”即可生成数据透视表。
通过数据透视表,我们可以方便地实现对数据的灵活分组和精确汇总。
二、数据汇总技巧1. 利用SUM函数进行求和在Excel中,SUM函数可以用于对一列或多列数值进行求和。
具体操作是:选择需要进行求和的单元格,然后输入“=SUM(选择的单元格范围)”并按下回车键即可计算所选单元格范围内数值的总和。
例如,若需要求解A1到A10的数值之和,可以输入“=SUM(A1:A10)”。
通过利用SUM函数,我们可以方便地对多列数据进行求和,实现快速汇总的功能。
聚集函数和数据分组⼀、聚集函数1、AVG([DISTINCT] expr) 返回某列的平均值。
忽略列值为NULL的⾏。
2、COUNT(DISTINCT expr,[expr...]) 返回⾏数。
使⽤COUNT(*)对表中⾏的数⽬进⾏计数,不管表中包含的是空值(NULL)还是⾮空值。
使⽤COUNT(column)对特定列中具有值的⾏进⾏计数,忽略列值为NULL的⾏。
3、MAX([DISTINCT] expr) 返回某列的最⼤值。
忽略列值为NULL的⾏。
4、MIN([DISTINCT] expr) 返回某列的最⼩值。
忽略列值为NULL的⾏。
5、SUM([DISTINCT] expr) 返回某列之和。
忽略列值为NULL的⾏。
⼆、分组数据 GROUP BY⼦句指⽰MySQL分组数据,然后对每个组⽽不是整个结果集进⾏聚集。
1、GROUP BY⼦句可以包含任意数⽬的列。
这使得能对分组进⾏嵌套,为数据分组提供更细致的控制。
2、如果GROUP BY⼦句嵌套了分组,数据将在最后规定的分组上进⾏汇总。
即在建⽴分组时,指定的所有列都⼀起计算(所以不能从个别的列取回数据)。
3、GROUP BY⼦句列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。
如果在SELECT中使⽤表达式,则必须在GROUP BY⼦句中指定相同的表达式。
不能使⽤别名。
4、除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY⼦句中给出。
5、如果分组列中有NULL值,则NULL将作为⼀个分组返回。
如果列中有多⾏NULL值,它们将分为⼀组。
6、使⽤WITH ROLLUP关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)的值。
7、使⽤HAVING关键字过滤分组。
MySQL字段控制、聚合和分组1字段控制查询1.1去除重复记录去除重复记录(两行或两行以上记录中系列的上的数据都相同),例如emp表中sal字段就存在相同的记录。
当只查询emp表的sal字段时,那么会出现重复记录,那么想去除重复记录,需要使用DISTINCT:SELECT DISTINCT sal FROM emp;1.2查看雇员的月薪与佣金之和因为sal和comm两列的类型都是数值类型,所以可以做加运算。
如果sal或comm中有一个字段不是数值类型,那么会出错。
SELECT *,sal+comm FROM emp;comm列有很多记录的值为NULL,因为任何东西与NULL相加结果还是NULL,所以结算结果可能会出现NULL。
下面使用了把NULL转换成数值0的函数IFNULL:SELECT *,sal+IFNULL(comm,0) FROM emp;1.3给列名添加别名在上面查询中出现列名为sal+IFNULL(comm,0),这很不美观,现在我们给这一列给出一个别名,为total:SELECT *, sal+IFNULL(comm,0) AS total FROM emp;给列起别名时,是可以省略AS关键字的:SELECT *,sal+IFNULL(comm,0) total FROM emp;2聚合函数聚合函数是用来做纵向运算的函数:●COUNT():统计指定列不为NULL的记录行数;●MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;●MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;●SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;●AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;2.1COUNT当需要纵向统计时可以使用COUNT()。
●查询emp表中记录数:SELECT COUNT(*) AS cnt FROM emp;●查询emp表中有佣金的人数:SELECT COUNT(comm) cnt FROM emp;注意,因为count()函数中给出的是comm列,那么只统计comm列非NULL的行数。
分组函数groupby在使用groupby函数之前,我们首先需要了解一些必要的概念。
SQL中的分组可以理解为将具有相同特征的记录归在一起,以形成一个组。
在数据库表中,我们可以根据其中一列的值将数据分为多个不同的组,然后对每个组进行进一步的操作。
使用groupby函数的一般语法如下:SELECT列1,列2,...列n,聚合函数FROM表名GROUPBY列1,列2,...列n;在这个语法中,列1,列2,...列n是根据哪些列来进行分组的字段,聚合函数是对每个组进行计算或筛选的函数,表名是我们要操作的数据表。
groupby函数常用的聚合函数有以下几种:-COUNT:统计每个组中的记录数。
-SUM:计算每个组中一些列的和。
-AVG:计算每个组中一些列的平均值。
-MIN:取每个组中一些列的最小值。
-MAX:取每个组中一些列的最大值。
下面我们通过一个示例来解释groupby函数的用法。
假设有一个sales表,保存了销售数据的相关信息,包括销售员的编号、客户的编号、销售额和销售日期等字段。
现在我们需要统计每个销售员的销售总额和平均销售额。
首先,我们可以使用以下SQL语句进行分组计算:SELECT SalesmanID, SUM(SalesAmount) AS TotalSales,AVG(SalesAmount) AS AvgSalesFROM salesGROUP BY SalesmanID;在这个例子中,我们根据SalesmanID字段将数据分组。
然后使用SUM和AVG函数分别计算每个组中的销售总额和平均销售额。
最后,将结果显示为SalesmanID、TotalSales和AvgSales三个列。
当我们执行这个SQL语句时,将会得到一个包含每个销售员的销售总额和平均销售额的结果集。
groupby函数除了用于计算聚合值外,还可以用于筛选数据。
我们可以在groupby函数的后面添加having子句来进行筛选。
MySQL中的分组和聚合函数的使用在处理大量的数据时,我们常常需要对数据进行分组和聚合操作。
MySQL作为一种强大的关系型数据库管理系统,提供了丰富的分组和聚合函数,帮助我们对数据进行灵活的处理和计算。
本文将介绍MySQL中分组和聚合函数的使用方法和注意事项。
一、分组操作分组操作是对数据进行分类的一种方式,它可以将相同特征的数据归为一组,以便于对每个组进行进一步的分析和计算。
在MySQL中,我们可以使用GROUP BY语句实现分组操作。
1.1 GROUP BY语句的基本用法GROUP BY语句通常和SELECT语句一起使用,用于指定按照哪些列进行分组。
例如,我们有一个名为orders的表,其中包含订单的信息,包括订单号、客户ID和订单金额等字段。
我们想要按照客户ID进行分组,并计算每个客户的订单总金额,可以使用以下SQL语句:SELECT customer_id, SUM(order_amount)FROM ordersGROUP BY customer_id;上述语句将按照customer_id列进行分组,并计算每个客户的订单总金额。
我们可以获得每个客户的客户ID和订单总金额。
1.2 支持多列分组除了按照单列进行分组,MySQL还支持按照多列进行分组。
只需要在GROUP BY语句中指定多个列名即可。
例如,我们想要按照客户ID和订单日期进行分组,并计算每个客户每天的订单总金额,可以使用以下SQL语句:SELECT customer_id, order_date, SUM(order_amount)FROM ordersGROUP BY customer_id, order_date;上述语句将按照customer_id和order_date两列进行分组,得到每个客户每天的订单总金额。
1.3 结果排序在分组操作中,我们可以使用ORDER BY语句对结果进行排序。
例如,我们希望按照客户ID进行分组,并按照订单总金额从大到小排序,可以使用以下SQL语句:SELECT customer_id, SUM(order_amount)FROM ordersGROUP BY customer_idORDER BY SUM(order_amount) DESC;上述语句将按照customer_id进行分组,并按照订单总金额从大到小进行排序,以便于找到订单金额最高的客户。
1.分组统计引入前了我们学习了一些聚合函数,并做了相应的运用,但结果只有一个。
前面我们还学习了分组group by是统计一个字段中的不重复的名称本课我们将结合聚合函数与分组的各自特点进行分组统计。
分组统计实际上与基础操作中的合并计算,分类汇总的原理是一样的。
不重复的单位2.统计出demo1表中各农场的总产量select 单位,sum(产量) as 总产量 from [demo1$] group by 单位一分组一聚合胜利农场35670团结农场29943由结果可以观察出与分类汇总,合并计算一样,但分组统计却更加的强大3.经计出demo2表中各蔬菜的总数量与总金额select 品名,sum(数量) as 总数量,sum(金额) as 总金额 from [demo2$] group by 品名4.demo3表中各学校高三组织的一次考试比赛的前20,现统计出各校各班的人数select 学校名称,班级,count(姓名) as 人数 from [demo3$] group by 学校名称,班级高三2班3富顺三中高三1班2高三2班5高三3班3骑龙中学高三1班1高三2班3高三3班1 5.求出demo4表中各类别的菜的总数量与总金额select 类别,品名,sum(数量) as 总数量,sum(金额) as 总金额 from [demo4$] group by 类别,品名猪肉70蔬菜白菜173花菜84蔬菜茄子43合一分组两聚合花菜8442269牛肉245122.57575茄子434355.9两分组一聚合两分组两聚合9318190.544.3。
Excel高级函数使用SUBTOTAL和AGGREGATE进行数据分组和聚合在Excel中,数据的分组和聚合是非常常见的操作。
在处理大量数据时,我们经常需要对数据进行分类和汇总,以便更好地理解数据的特征和趋势。
Excel提供了许多高级函数来实现这些操作,其中包括SUBTOTAL和AGGREGATE函数。
一、SUBTOTAL函数SUBTOTAL函数是一个非常实用的函数,它可以对指定的数据范围进行分组并进行不同的计算。
SUBTOTAL函数的语法为:=SUBTOTAL(function_num, range1, range2, ...)其中,function_num是用于指定要执行的计算方式的数字,range1、range2等是要进行计算的数据范围。
SUBTOTAL函数支持多达11个不同的计算方式,比如求和、平均值、最大值、最小值等。
具体的计算方式如下:1. AVERAGE:计算范围内数值的平均值。
2. COUNT:计算范围内的数值个数。
3. COUNTA:计算范围内的非空单元格个数。
4. MAX:计算范围内数值的最大值。
5. MIN:计算范围内数值的最小值。
6. PRODUCT:计算范围内数值的乘积。
7. STDEV.S:计算范围内数值的标准偏差(总体)。
8. STDEV.P:计算范围内数值的标准偏差(样本)。
9. SUM:计算范围内数值的和。
10. VAR.S:计算范围内数值的方差(总体)。
11. VAR.P:计算范围内数值的方差(样本)。
下面是一个使用SUBTOTAL函数的例子:假设我们有一个销售数据表格,包含了不同地区的销售额数据。
我们想要对每个地区的销售额进行分组,并计算每个地区的销售额总和。
首先,在一个新的单元格中输入SUBTOTAL函数的公式:=SUBTOTAL(9, B2:B10)这里的9代表SUM函数,B2:B10是要进行计算的数据范围。
按下Enter键后,我们会得到地区销售额的总和。
使用MySQL进行分组和聚合查询引言:MySQL是一种常用的开源数据库管理系统,提供了强大的查询和分析功能。
在数据分析中,经常需要对数据进行分组和聚合,以便获取有关数据集的汇总信息。
本文将介绍如何使用MySQL进行分组和聚合查询,以及一些常用的技巧和注意事项。
一、概述分组查询是指将数据集按照指定的列进行划分,并对每个分组进行计算或统计。
聚合查询是指对某个列或多个列的值进行汇总计算,如求和、计数、平均值等。
分组和聚合查询可以帮助我们更好地理解和分析数据,从而得出有关数据的洞察和结论。
二、基本语法在MySQL中,使用GROUP BY和聚合函数来进行分组和聚合查询。
基本的语法如下:SELECT 列名, 聚合函数(列名)FROM 表名GROUP BY 列名;其中,列名表示需要分组的列,聚合函数表示需要在每个分组上进行计算的函数,表名表示需要查询的数据表。
三、分组查询示例假设我们有一个名为students的表,其中包含学生的姓名、班级和成绩信息。
我们想要计算每个班级的平均成绩。
可以使用如下SQL语句进行查询:SELECT 班级, AVG(成绩) AS 平均成绩FROM studentsGROUP BY 班级;根据以上查询语句,MySQL将根据班级对数据进行分组,并对每个班级的成绩进行求平均值的计算。
查询结果将包含每个班级的平均成绩。
四、聚合函数MySQL提供了多种聚合函数,用于对分组数据进行计算。
常用的聚合函数有:1. COUNT:计算某列的行数。
2. SUM:计算某列的数值总和。
3. AVG:计算某列的平均值。
4. MAX:计算某列的最大值。
5. MIN:计算某列的最小值。
除了以上聚合函数,MySQL还提供了其他功能强大的聚合函数,如标准差、方差、位数计算等。
五、HAVING子句HAVING子句用于对分组后的数据进行筛选,类似于WHERE子句。
不同的是,WHERE子句用于对原始数据进行筛选,而HAVING子句用于对分组后的数据进行筛选。
聚合函数总结在实际SQL应用中,经常需要进行分组聚合,即将查询对象按一定条件分组,然后对每一个组进行聚合分析。
比如我们常见的一些分组计算需求:求某个部门的薪资总和,薪资平均值,薪资最大值等等。
分组聚合函数也可称之为多行函数,它的输入是多个行构成得一个行集(这个行集可以是一张表的所有行,也可以是按照某个维度进行分组后的某一组行),而输出都是一个值。
1.分组聚合函数语法以及 SQL 语句执行过程SQL中使用分组聚合函数的语法SELECT [column,] group_function(column), ... FROM table[WHERE condition][GROUP BY column][having] [ORDER BY column];在 select 语句中使用 group by 子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用 having 子句限制返回的结果集。
查询语句的 select 和 group by,having,Order by 子句是分组聚合函数唯一出现的地方,在 where 子句中不能使用分组聚合函数。
select department_id, sum(salary)from employees where salary>10000 group by department_idhaving sum(salary) > 11000 order by sum(salary)sql语句执行过程(1)按select找到where满足条件的元组形成结果表。
相当于:select department_id, salary from employeeswhere salary>10000(2)将结果表按group中指定的列进行分组,该属性列值相等的元组为一组,通常会在每组中作用集函数。
(如果group指定多个列,先按第一列分组,然后在每个组中再按第二列分组)相当于:select department_id, sum(salary)from employees where salary>10000 group by department_id(3)如果group子句带having短语,则分组聚合后只有满足having指定条件的组才输出。
MySQL中的分组与聚合函数使用MySQL是一个广泛使用的开源关系型数据库管理系统,它提供了强大的数据处理和管理能力。
其中,分组与聚合函数是MySQL中常用的功能,能够帮助我们对数据进行分组和统计。
本文将详细介绍MySQL中的分组与聚合函数的使用,以及一些常见的应用场景。
一、概述在数据库中,我们经常需要对数据进行分组和统计,比如统计某个列的平均值、总和、最大值、最小值等。
MySQL提供了一系列的聚合函数,包括SUM、AVG、MAX、MIN等,可以满足我们的需求。
二、分组1. 基本语法在MySQL中,我们可以使用GROUP BY语句对数据进行分组。
其基本语法如下:```SELECT 列名FROM 表名GROUP BY 列名;```其中,列名代表需要进行分组的列,表名代表数据来源的表。
2. 示例假设我们有一个学生成绩表,包含学生姓名和成绩两个字段,我们想要按照学生姓名对成绩进行分组,统计每个学生的平均成绩。
可以使用以下SQL语句实现:```SELECT 姓名, AVG(成绩) AS 平均成绩FROM 成绩表GROUP BY 姓名;```上述SQL语句将返回每个学生的姓名和对应的平均成绩。
三、聚合函数1. SUM函数SUM函数用于计算某个列的总和。
其基本语法如下:```SELECT SUM(列名)FROM 表名;```其中,列名代表需要计算总和的列,表名代表数据来源的表。
2. AVG函数AVG函数用于计算某个列的平均值。
其基本语法如下:```SELECT AVG(列名)FROM 表名;```其中,列名代表需要计算平均值的列,表名代表数据来源的表。
3. MAX函数MAX函数用于计算某个列的最大值。
其基本语法如下:```SELECT MAX(列名)FROM 表名;```其中,列名代表需要计算最大值的列,表名代表数据来源的表。
4. MIN函数MIN函数用于计算某个列的最小值。
其基本语法如下:```SELECT MIN(列名)FROM 表名;```其中,列名代表需要计算最小值的列,表名代表数据来源的表。
在线学习好工作/Mysql分组查询配合聚合函数Mysql是我们最常使用的数据库之一,因此对于开发新人而言,必须掌握好其方方面面的知识,今天和大家分享的就是Mysql分组查询配合聚合函数相关内容,一起来看看吧。
配合聚合函数(系统函数)COUNT()MAX()MIN()AVG()SUM()注意:GROU BY配合聚合函数得到分组详情查询编号、性别、得到用户详情按照性别分组mysql> SELECT id,sex,GROUP_CONCAT(username) FROM cms_user GROUP BY sex; +----+--------+---------------------------------+| id | sex | GROUP_CONCAT(username) |+----+--------+---------------------------------+| 1 | 男| 张三,rose,king,ring,章子怡|| 4 | 女| long,queen,blek,张三丰,lily || 11 | 保密| john,test1 |+----+--------+---------------------------------+3 rows in set (0.07 sec)查询ProID、性别详情、注册时间详情、以及用户名详情安装prod来分组mysql> SELECTproId,GROUP_CONCAT(username),GROUP_CONCAT(sex),GROUP_CONCAT(regTime) -> FROM cms_user GROUP BY proId;+-------+-------------------------------+------------------------+--------------------------------------------------------+|proId|GROUP_CONCAT(username)|GROUP_CONCAT(sex)|GROUP_CONCAT(regTim e) |+-------+-------------------------------+------------------------+--------------------------------------------------------+|1|张三,blek,test1| 男,女,保密|1419811708,1419818708,1419811708 ||2|ring,张三丰,rose,lily,john | 男,女,男,女,保密|1419815708,1419812708,1419821708,1419831708,1419841708 ||3|queen,章子怡| 女,男| 1419861708,1419813708 || 4 | long | 女| 1419814708 || 5 | king | 男| 1419817708 |+-------+-------------------------------+------------------------+--------------------------------------------------------+5 rows in set (0.00 sec)立起来显示加一个\G(得到用户详情、性别,注册时间)mysql> SELECTproId,GROUP_CONCAT(username),GROUP_CONCAT(sex),GROUP_CONCAT(regTime) -> FROM cms_user GROUP BY proId\G;*************************** 1. row *************************** proId: 1GROUP_CONCAT(username): 张三,blek,test1GROUP_CONCAT(sex): 男,女,保密GROUP_CONCAT(regTime): 1419811708,1419818708,1419811708*************************** 2. row *************************** proId: 2GROUP_CONCAT(username): ring,张三丰,rose,lily,johnGROUP_CONCAT(sex): 男,女,男,女,保密GROUP_CONCAT(regTime):1419815708,1419812708,1419821708,1419831708,1419841708*************************** 3. row *************************** proId: 3GROUP_CONCAT(username): queen,章子怡GROUP_CONCAT(sex): 女,男GROUP_CONCAT(regTime): 1419861708,1419813708*************************** 4. row *************************** proId: 4GROUP_CONCAT(username): longGROUP_CONCAT(sex): 女GROUP_CONCAT(regTime): 1419814708*************************** 5. row *************************** proId: 5GROUP_CONCAT(username): kingGROUP_CONCAT(sex): 男GROUP_CONCAT(regTime): 14198177085 rows in set (0.00 sec)查看cms_user表的记录mysql> SELECT * FROM cms_user;+----+-----------+--------------+-------------+------------+----------+-------+------+--------+| id | username | password | email | regTime | face | proId | age | sex |+----+-----------+--------------+-------------+------------+----------+-------+------+--------+| 1 | 张三| zhangsan | user@ | 1419811708 | user.jpg | 1 | 18 | 男|| 2 | 张三丰| zhangsanfeng | user@ | 1419812708 | user.jpg | 2 | 18 | 女|| 3 | 章子怡| zhangsan | user@ | 1419813708 | user.jpg | 3 | 18 | 男|| 4 | long | long | user@ | 1419814708 | user.jpg | 4 | 18 | 女|| 5 | ring | ring | user@ | 1419815708 | user.jpg | 2 | 18 | 男|| 6 | queen | queen | user@ | 1419861708 | user.jpg | 3 | 18 | 女|| 7 | king | king | user@ | 1419817708 | user.jpg | 5 | 18 | 男|| 8 | blek | blek | user@ | 1419818708 | user.jpg | 1 | 18 | 女|| 9 | rose | rose | user@ | 1419821708 | user.jpg | 2 | 18 | 男|| 10 | lily | lily | user@ | 1419831708 | user.jpg | 2 | 18 | 女|| 11 | john | john | user@ | 1419841708 | user.jpg | 2 | 18 | 保密|| 12 | test1 | test1 | user@ | 1419811708 | user.jpg | 1 | NULL | 保密| +----+-----------+--------------+-------------+------------+----------+-------+------+--------+12 rows in set (0.00 sec)更新年龄字段mysql> UPDATE cms_user SET age=11 WHERE id=1;Query OK, 1 row affected (0.05 sec)Rows matched: 1 Changed: 1 Warnings: 0Query OK, 1 row affected (0.06 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> UPDATE cms_user SET age=33 WHERE id=3; Query OK, 1 row affected (0.02 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> UPDATE cms_user SET age=44 WHERE id=4; Query OK, 1 row affected (0.05 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> UPDATE cms_user SET age=25 WHERE id=5; Query OK, 1 row affected (0.02 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> UPDATE cms_user SET age=77 WHERE id=6; Query OK, 1 row affected (0.14 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> UPDATE cms_user SET age=56 WHERE id=7; Query OK, 1 row affected (0.06 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> UPDATE cms_user SET age=88 WHERE id=8; Query OK, 1 row affected (0.07 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> UPDATE cms_user SET age=12 WHERE id=9; Query OK, 1 row affected (0.05 sec)Rows matched: 1 Changed: 1 Warnings: 0Query OK, 1 row affected (0.08 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> UPDATE cms_user SET age=65 WHERE id=11;Query OK, 1 row affected (0.03 sec)Rows matched: 1 Changed: 1 Warnings: 0查看cms_user表记录mysql> SELECT * FROM cms_user;+----+-----------+--------------+-------------+------------+----------+-------+------+--------+| id | username | password | email | regTime | face | proId | age | sex |+----+-----------+--------------+-------------+------------+----------+-------+------+--------+| 1 | 张三| zhangsa | user@ | 1419811708 | user.jpg | 1 | 11 | 男|| 2 | 张三丰| zhangsanfeng | user@ | 1419812708 | user.jpg | 2 | 21 | 女| 3 | 章子怡| zhangsan | user@ | 1419813708 | user.jpg | 3 | 33 | 男|| 4 | long | long | user@ | 1419814708 | user.jpg | 4 | 44 | 女|| 5 | ring | ring | user@ | 1419815708 | user.jpg | 2 | 25 | 男|| 6 | queen | queen | user@ | 1419861708 | user.jpg | 3 | 77 | 女|| 7 | king | king | user@ | 1419817708 | user.jpg | 5 | 56 | 男|| 8 | blek | blek | user@ | 1419818708 | user.jpg | 1 | 88 | 女|| 9 | rose | rose | user@ | 1419821708 | user.jpg | 2 | 12 | 男|| 10 | lily | lily | user@ | 1419831708 | user.jpg | 2 | 32 | 女|| 11 | john | john | user@ | 1419841708 | user.jpg | 2 | 65 | 保密|| 12 | test | test1 | user@ | 1419811708 | user.jpg | 1 | NULL | 保密| +----+-----------+--------------+-------------+------------+----------+-------+------+--------+12 rows in set (0.00 sec)查询编号,性别、用户详情以及组中总人数按照性别分组mysql> SELECT id,sex,GROUP_CONCAT(username)AS users,COUNT(*) AS totalUsers FROM cms_user GROUP BY sex;+----+--------+---------------------------------+------------+| id | sex | users | totalUsers |+----+--------+---------------------------------+------------+| 1 | 男| 张三,rose,king,ring,章子怡| 5 || 4 | 女| long,queen,blek,张三丰,lily | 5 || 11 | 保密| john,test1 | 2 |+----+--------+---------------------------------+------------+3 rows in set (0.02 sec)统计表中所有记录(使用*)mysql> SELECT COUNT(*) AS totalUsers FROM cms_user;+------------+| totalUsers |+------------+| 12 |+------------+1 row in set (0.01 sec)统计表中所有记录(使用指定字段)mysql> SELECT COUNT(id) AS totalUsers FROM cms_user;+------------+| totalUsers |+------------+| 12 |+------------+1 row in set (0.00 sec)查看记录mysql> SELECT * FROM cms_user;+----+-----------+--------------+-------------+------------+----------+-------+------+--------+| id | username | password | emai | regTime | face | proId | age | sex |+----+-----------+--------------+-------------+------------+----------+-------+------+--------+| 1 | 张三| zhangsa | user@ | 1419811708 | user.jpg | 1 | 11 | 男|| 2 | 张三丰| zhangsanfeng | user@ | 1419812708 | user.jpg | 2 21 | 女|| 3 | 章子怡| zhangsa | user@ | 1419813708 | user.jpg | 3 | 33 | 男| | 4 | long | long | user@ | 1419814708 | user.jpg | 4 | 44 | 女|| 5 | ring | ring | user@ | 1419815708 | user.jpg | 2 | 25 | 男|| 6 | queen | queen | user@ | 1419861708 | user.jpg | 3 | 77 | 女|| 7 | king | king | user@ | 1419817708 | user.jpg | 5 | 56 | 男|| 8 | blek | blek | user@ | 1419818708 | user.jpg | 1 | 88 | 女|| 9 | rose | rose | user@ | 1419821708 | user.jpg | 2 | 12 | 男|| 10 | lily | lily | user@ | 1419831708 | user.jpg | 2 | 32 | 女|| 11 | john | john | user@ | 1419841708 | user.jpg | 2 | 65 | 保密|| 12 | test1 | test1 | user@ | 1419811708 | user.jpg | 1 | NULL | 保密|+----+-----------+--------------+-------------+------------+----------+-------+------+--------+12 rows in set (0.00 sec)Count(字段)不统计null值mysql> SELECT COUNT(age) AS totalUsers FROM cms_user;+------------+| totalUsers |+------------+| 11 |+------------+1 row in set (0.00 sec)查询编号、性别、用户名详情、组中总人数、组中最大年龄、最小年龄、平均年龄、以及年龄总和(集合函数的使用)mysql> SELECT id,sex,GROUP_CONCAT(username),-> COUNT(*) AS totalUsers,-> MAX(age) AS max_age,-> MIN(age) AS min_age,-> AVG(age) AS avg_age,-> SUM(age) AS sum_age-> FROM cms_user-> GROUP BY sex;+----+--------+---------------------------------+------------+---------+---------+---------+---------+| id | sex | GROUP_CONCAT(username) | totalUsers | max_age | min_age |avg_age | sum_age |+----+--------+---------------------------------+------------+---------+---------+---------+---------+| 1 | 男| 张三,rose,king,ring,章子怡| 5 | 56 | 11 | 27.4000 | 137 || 4 | 女| long,queen,blek,张三丰,lily | 5 | 88 | 21 | 52.4000 | 262 || 11 | 保密| john,test1 | 2 | 65 | 65 | 65.0000 | 65 |+----+--------+---------------------------------+------------+---------+---------+---------+---------+ 3 rows in set (0.05 sec)配合WITH ROLLUP记录上面所有记录的总和在语句的末尾加上with rollup,在语句的末尾统计记录的总和。
聚合函数也称为分组函数聚合函数是一种SQL语句中常用的函数,用于对数据进行聚合操作,例如求和、计数、平均值等。
聚合函数通常与GROUP BY子句一起使用,将数据按照指定的列进行分组,并对每个分组进行聚合计算。
常见的聚合函数包括:1. COUNT:用于统计指定列或者行的数量。
2. SUM:用于计算指定列或者行的总和。
3. AVG:用于计算指定列或者行的平均值。
4. MAX:用于找出指定列或者行中的最大值。
5. MIN:用于找出指定列或者行中的最小值。
使用聚合函数时需要注意以下几点:1. 聚合函数只能作用于SELECT语句中的SELECT子句和HAVING子句,不能作用于WHERE子句中。
2. 如果使用了GROUP BY子句,则SELECT语句中除了聚合函数外,必须包含所有在GROUP BY子句中出现的列。
3. 如果使用了HAVING子句,则必须在SELECT语句中使用GROUP BY子句。
下面是一个示例:假设有一个学生成绩表格,包含学生姓名、科目和成绩三个字段。
我们可以通过以下SQL语句来查找每个学生每门科目的平均成绩:SELECT name, subject, AVG(score) FROM scores GROUP BY name, subject;这条语句将数据按照学生姓名和科目进行分组,并对每个分组计算平均成绩。
除了以上常见的聚合函数,还有一些其他的聚合函数,例如:1. GROUP_CONCAT:用于将分组后的结果合并成一个字符串。
2. STDDEV:用于计算指定列或者行的标准差。
3. VARIANCE:用于计算指定列或者行的方差。
4. BIT_AND/BIT_OR:用于计算指定列或者行的位与/位或运算结果。
总之,聚合函数是SQL语句中非常重要的一部分,可以帮助我们对数据进行更加精细化的处理和统计。
在实际应用中,需要根据具体需求选择不同的聚合函数,并结合GROUP BY子句进行使用。
MySQL分组查询和聚合函数概述相信我们经常会遇到这样的场景:想要了解双⼗⼀天猫购买化妆品的⼈员中平均消费额度是多少(这可能有利于对商品价格区间的定位);或者不同年龄段的化妆品消费占⽐是多少(这可能有助于对商品备货量的预估)。
这个时候就要⽤到分组查询,分组查询的⽬的是为了把数据分成多个逻辑组(购买化妆品的⼈员是⼀个组,不同年龄段购买化妆品的⼈员也是组),并对每个组进⾏聚合计算的过程:。
分组查询的语法格式如下:select cname, group_fun,... from tname [where condition]group by group_expression [having group_condition];说明⼀下:1、group_fun 代表聚合函数,是指对分组的数据进⾏聚合计算的函数。
2、group_expression 代表分组表达式,允许多个,多个之间使⽤逗号隔开。
3、group_condition 分组之后,再对分组后的数据进⾏条件过滤的过程。
4、分组语法中,select后⾯出现的字段要么是group by后⾯的字段,要么是聚合函数的列,其他类型会报异常,我们下⾯的内容中会详细说明。
说分组之前,先来看看聚合函数,聚合函数是分组查询语法格式中重要的⼀部分。
我们经常需要汇总数据⽽不⽤把它们实际检索出来,所以MySQL提供了专门的函数。
使⽤这些函数,可⽤于计算我们需要的数据,以便分析和⽣成报表。
聚合函数聚合函数有以下⼏种。
函数说明AVG()返回指定字段的平均值COUNT()返回查询结果⾏数MAX()返回指定字段的最⼤值 MIN()返回指定字段的最⼩值SUM()返回指定字段的求和值AVG()函数AVG()通过对表中⾏数计数并计算特定列值之和,求得该列的平均值。
AVG()可⽤来返回所有列的平均值,也可以⽤来返回特定列或⾏的平均值。
下⾯⽰例返回⽤户表中⽤户的平均年龄:mysql> select * from user2;+----+--------+------+----------+-----+| id | name | age | address | sex |+----+--------+------+----------+-----+| 1 | brand | 21 | fuzhou | 1 || 2 | helen | 20 | quanzhou | 0 || 3 | sol | 21 | xiamen | 0 || 4 | weng | 33 | guizhou | 1 || 5 | selina | 25 | NULL | 0 || 6 | anny | 23 | shanghai | 0 || 7 | annd | 24 | shanghai | 1 || 8 | sunny | NULL | guizhou | 0 |+----+--------+------+----------+-----+8 rows in setmysql> select avg(age) from user2;+----------+| avg(age) |+----------+| 23.8571 |+----------+1 row in set注意点:1、AVG()只能⽤来确定特定数值列的平均值。
SQL分组查询及聚集函数的使⽤今天要做⼀个查询统计功能,⼀开始有点犯难,上午尝试⼤半天才写出统计sql语句,才发现⾃⼰sql分组查询及聚集函数没学好;其实就是group by⼦句和⼏个聚集函数,熟练使⽤统计功能很简单。
在此总结下今天查询统计是⽤到的⼏个sql函数。
SQL聚集函数sum函数 sum函数⽤于计算查询表中指定字段中所有记录值的总和。
语法:sum(exp) 说明:该函数不计算包含Null 值的字段。
例:SELECT SUM(population) FROM bbc 这⾥的SUM作⽤在所有返回记录的 population字段上,结果就是该查询只返回⼀个结果,即所有国家的总⼈⼝数。
avg函数 Avg函数是⽤来计算特定查询字段中的⼀组数值的算术平均值(将全部值的总和除以值的数⽬)。
语法:avg(exp) 说明:该函数只能对数值类型的字段进⾏计算。
例:求所有雇员薪⽔的平均值。
SELECT AVG(emp_salary) FROM employee;count函数 count函数是⽤来计算查询表中的记录数。
语法:count(exp) 说明:count函数不计算具有Null字段的记录,但如果将exp设置为星号(*),则count函数将计算所有记录的总量,包括有Null的字段的记录。
Distinct短句可以取消指定列中的重复值 sql除了不允许对count(*)使⽤distinct,对其余情况都能⽤distinct,但⼀般情况下是没有必要⽤的,除⾮你觉得的确是需要⽤distinct。
min函数 min函数是⽤来从查询表中返回指定字段中的最⼩值。
语法:min(exp)max函数 max函数是⽤来从查询表中返回指定字段中的最⼤值。
语法:max(exp)GROUP BY⼦句对记录的分组是通过关键字 GROUP BY 实现的, GROUP BY 后⾯跟着⼀个定义组的构成的属性列表。
如果我们使⽤语句 GROUP BYA1,……, Ak 我们就把关系分成了组,这样当且仅当两条记录在所有属性 A1,……, Ak 上的值达成⼀致,它们才是同⼀组的。
count⾏总数avg平均数sum列值和max最⼤值min最⼩值SQL语句——08、聚集,分组,⾏转列常⽤聚集函数是对⼀组或⼀批数据进⾏综合操作后返回⼀个结果,如下:⽤法说明count([{distinct|all} '列名'|*) 为列值时空不在统计之内,为*时包含空⾏和重复⾏idle>select count(comm) from emp;COUNT(COMM)-----------4idle>select count(ename) from emp;COUNT(ENAME)------------14idle>select count(*) from emp;COUNT(*)----------14idle>select count(deptno) from emp;COUNT(DEPTNO)-------------14idle>select count(distinct deptno) from emp;COUNT(DISTINCTDEPTNO)---------------------3idle>select count(all deptno) from emp;COUNT(ALLDEPTNO)----------------14上⾯执⾏的聚集函数都是对所有记录统计,如果想分组统计(⽐如统计部门的平均值)需要使⽤group by,为了限制分组统计的结果需要使⽤having过滤求出每个部门的平均⼯资idle>select deptno,avg(sal) from emp group by deptno;DEPTNO AVG(SAL)---------- ----------301566.66667202175102916.66667分组再排序idle>select deptno,avg(sal) from emp group by deptno order by deptno ;DEPTNO AVG(SAL)---------- ----------102916.66667202175301566.66667分组修饰列可以是未选择的列idle>select avg(sal) from emp group by deptno order by deptno;AVG(SAL)----------2916.6666721751566.66667如果在查询中使⽤了分组函数,任何不在分组函数中的列或表达式必须在group by⼦句中。
聚集函数只能出现在2个位置(1)select与from之间;(2)having子句后面。
(1)统计“会计学院”的学生人数。
SELECT count(*) as 会计学院学生人数FROM student where 所属院系="会计学院"; SELECT count(学号) as 会计学院学生人数FROM student where 所属院系="会计学院"; SELECT count(姓名) as 会计学院学生人数FROM student where 所属院系="会计学院"; (2)统计每个学院的学生人数。
SELECT count(*) as 学生人数FROM student group by 所属院系;SELECT 所属院系,count(*) as 学生人数FROM student group by 所属院系;(3)统计至少有5个学生所在学院的学生人数。
SELECT 所属院系,count(*) as 学生人数FROM student group by 所属院系having count(*)>=5;(4)查找每门课成绩都在80分(含80分)以上学生的学号、姓名和所属院系。
select 学号,姓名,所属院系from student where 学号in (select 学号from grade group by 学号having min(成绩)>=80)(结果为:王海、李军、周洲、陈明毅)将成绩为空的记录抛除:方法一:select 学号,姓名,所属院系from student where 学号in (select 学号from grade group by 学号having min(成绩)>=80) and 学号not in (select 学号from grade where 成绩is null ) (结果为:王海、李军)方法二:select 学号,姓名,所属院系from student where 学号not in (select 学号from grade where 成绩<80 ) and 学号not in (select 学号from grade where 成绩is null ) and 学号in (select 学号from grade)找错:(1)select 学号,姓名,所属院系from student where 学号not in (select 学号from grade where 成绩<80 group by 学号having count(*)=0)子查询的结果为空,原因是什么?(搜出“成绩<80”的之后,对找出的结果进行分组,不可能count(*)=0 ,注意执行顺序)(5)查找每门课成绩都在80分(含80分)至90分(含90分)之间学生的学号、姓名和所属院系。
mysql分组与聚合函数## MySQL分组* group by> group by语法可以根据给定字段对查询结果进⾏分组统计,相同属性的数据为⼀个组。
通常,在每组中通过聚合函数来可以计算组中最⼤,最⼩等。
> 如果group by带有having,则只有满⾜having后⾯的条件的组才能输出。
注意: having 必须在group by之后。
* 与分组相关的聚合函数count() 返回某个字段的值的⾏数max() 求最⼤某字段最⼤的值min() 求某字段最⼩值avg() 返回某字段平均值sum() 求某字段总数group_concat() 将分组的结果拼接成字符串* group by分组SQL语法select 字段 from 表名 where where条件 group by 分组条件 having having条件order by 字段 asc/desc limit offset, row注意:1. GROUP BY必须出现在WHERE 之后,ORDER BY 之前。
2. 除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY中给出//错误,由于name字段没有写到group by之后select count(id),name,sex from user group by sex;//正确写法select count(id),name,sex from user group by sex,name;备注:group by ⽤于根据字段进⾏分组having 指定分组的搜索条件,对分组的结果做进⼀步的处理limit 显⽰查询出来的数据条数## 例⼦1. 某个员⼯信息表(staff)结构和数据如下:id name dept salary edlevel hiredate1 张三开发部 2000 3 2009-10-112 李四开发部 25003 2009-10-013 王五设计部 2600 5 2010-10-024 王六设计部 2300 4 2010-10-035 马七设计部 2100 4 2010-10-066 赵⼋销售部 3000 5 2010-10-057 钱九销售部 3100 7 2010-10-078 孙⼗销售部 3500 7 2010-10-06//staff建表语句create table staff(id int not null primary key auto_increment,name varchar(200) not null,dept varchar(50) not null comment '部门',salary float(15,2) comment '薪⽔',edlevel tinyint not null comment '等级',hiredate date not null comment '⼊职时间')engine=innodb default charset=utf8;insert into staff(name,dept,salary,edlevel,hiredate) values('张三','开发部',2000,3,'2009-10-11'); insert into staff(name,dept,salary,edlevel,hiredate) values('李四','开发部',2500,3,'2009-10-01'); insert into staff(name,dept,salary,edlevel,hiredate) values('王五','设计部',2600,5,'2010-10-02'); insert into staff(name,dept,salary,edlevel,hiredate) values('王六','设计部',2300,4,'2010-10-03'); insert into staff(name,dept,salary,edlevel,hiredate) values('马七','设计部',2100,4,'2010-10-06'); insert into staff(name,dept,salary,edlevel,hiredate) values('赵⼋','销售部',3000,5,'2010-10-05'); insert into staff(name,dept,salary,edlevel,hiredate) values('钱九','销售部',3100,7,'2010-10-07'); insert into staff(name,dept,salary,edlevel,hiredate) values('孙⼗','销售部',3500,7,'2010-10-06'); ## 聚合函数的简单使⽤1. 求公司总⼈数select count(id) from staff;2. 求公司薪⽔总⽀出select sum(salary) from staff;3. 求公司最⾼薪⽔select max(salary) from staff;4. 求公司最低薪⽔select min(salary) from staff;5. 求公司平均薪⽔select avg(salary) from staff;## 分组与聚合函数结合使⽤例⼦例如,统计出各个部门的员⼯⼈数select count(*) from staff group by dept;* group_concat函数与group by结合使⽤例⼦求:得到每个部门的员⼯的名字select dept,group_concat(name) from staff group by dept;例如,列出每个部门最⾼薪⽔的结果,sql语句如下:SELECT dept, MAX(SALARY) FROM staff GROUP BY dept查询结果如下:dept MAXIMUM开发部 2500设计部 2600销售部 35002. 查询每个部门的总薪⽔数select dept, sum(salary) as total from staff group by dept;查询结果如下:dept total开发部 4500设计部 7000销售部 96003. 将where字句与group by ⼦句⼀起使⽤> 注意:必须在group by之前指定where例⼦:查询公司2010年之后⼊职的各个部门每个级别⾥的最⾼薪⽔SELECT DEPT, EDLEVEL, MAX( SALARY ) AS MAXIMUMFROM staffWHERE HIREDATE > '2010-01-01'GROUP BY DEPT, EDLEVEL;查询结果如下:DEPT EDLEVEL MAXIMUM设计部 4 2300设计部 5 2600销售部 5 3000销售部 7 35004. 在GROUP BY⼦句之后使⽤HAVING⼦句> 可应⽤限定条件进⾏分组,以便系统仅对满⾜条件的组返回结果。
python groupby函数用法Python中的groupby函数是一种非常有用的函数,它可以将一个序列按照指定的规则进行分组。
在数据分析和处理中,groupby函数经常被用来对数据进行分组统计和聚合操作。
groupby函数的基本用法如下:```pythonfrom itertools import groupby# 定义一个列表lst = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]# 对列表进行分组groups = groupby(lst)# 遍历分组后的结果for key, group in groups:print(key, list(group))```输出结果为:```1 [1]2 [2, 2]3 [3, 3, 3]4 [4, 4, 4, 4]```可以看到,groupby函数将列表lst按照相同的元素进行了分组,并将每个分组的元素放在一个迭代器中。
在遍历分组后的结果时,可以通过key获取分组的键值,通过list(group)获取分组的元素列表。
除了对列表进行分组外,groupby函数还可以对任意可迭代对象进行分组。
例如,对一个字符串进行分组:```pythonfrom itertools import groupby# 定义一个字符串s = 'aaabbbcccdddeee'# 对字符串进行分组groups = groupby(s)# 遍历分组后的结果for key, group in groups:print(key, list(group))```输出结果为:```a ['a', 'a', 'a']b ['b', 'b', 'b']c ['c', 'c', 'c']d ['d', 'd', 'd']e ['e', 'e', 'e']```在实际应用中,groupby函数经常被用来进行数据分组统计和聚合操作。
聚集函数只能出现在2个位置
(1)select与from之间;
(2)having子句后面。
(1)统计“会计学院”的学生人数。
SELECT count(*) as 会计学院学生人数FROM student where 所属院系="会计学院"; SELECT count(学号) as 会计学院学生人数FROM student where 所属院系="会计学院"; SELECT count(姓名) as 会计学院学生人数FROM student where 所属院系="会计学院"; (2)统计每个学院的学生人数。
SELECT count(*) as 学生人数FROM student group by 所属院系;
SELECT 所属院系,count(*) as 学生人数FROM student group by 所属院系;
(3)统计至少有5个学生所在学院的学生人数。
SELECT 所属院系,count(*) as 学生人数FROM student group by 所属院系having count(*)>=5;
(4)查找每门课成绩都在80分(含80分)以上学生的学号、姓名和所属院系。
select 学号,姓名,所属院系from student where 学号in (select 学号from grade group by 学号having min(成绩)>=80)
(结果为:王海、李军、周洲、陈明毅)
将成绩为空的记录抛除:
方法一:
select 学号,姓名,所属院系from student where 学号in (select 学号from grade group by 学号having min(成绩)>=80) and 学号not in (select 学号from grade where 成绩is null ) (结果为:王海、李军)
方法二:
select 学号,姓名,所属院系from student where 学号not in (select 学号from grade where 成绩<80 ) and 学号not in (select 学号from grade where 成绩is null ) and 学号in (select 学号from grade)
找错:
(1)select 学号,姓名,所属院系from student where 学号not in (select 学号from grade where 成绩<80 group by 学号having count(*)=0)
子查询的结果为空,原因是什么?
(搜出“成绩<80”的之后,对找出的结果进行分组,不可能count(*)=0 ,注意执行顺序)
(5)查找每门课成绩都在80分(含80分)至90分(含90分)之间学生的学号、姓名和所属院系。
select 学号,姓名,所属院系from student where 学号in (select 学号from grade group by 学号having min(成绩)>=80 and max(成绩)<=90)地
找错(查找成绩都在……之间的课程信息,有点问题)
A. select * from course where 课程编号in (select 课程编号from grade,schedule where grade.
课程ID=schedule.课程ID group by 课程ID having min(成绩)>=80 and max(成绩)>=90)
B. select * from course where 课程编号in (select 课程编号from grade,schedule where grade.课程ID=schedule.课程ID group by grade.课程ID having min(成绩)>=80 and max(成绩)>=90)
select course.* from course,schedule where course.课程编号=schedule.课程编号in (select grade.课程ID from grade,schedule where grade.课程ID=schedule.课程ID group by grade.课程ID having min(成绩)>=70 and max(成绩)>=98)。