`
- 浏览:
438081 次
- 性别:
- 来自:
北京
-
数据库查询时对多个字段group by 有什么作用
"group by 字段列表"
表示根据后面的字段来分组,如果只有1个字段,那只是根据这个字段的值来进行一次分组就可以了;若后面有多个字段,那表示根据多字段的值来进行层次分组,分组层次从左到右,即先按第1个字段分组,然后在第1个字段值相同的记录中,再根据第2个字段的值进行分组;接着第2个字段值相同的记录中,再根据第3个字段的值进行分组......依次类推。
一.数据分组(group by ):
select 列a,聚合函数(聚合函数规范) from 表明
where 过滤条件
group by 列a
group by 字句也和where条件语句结合在一起使用。当结合在一起时,where在前,group by 在后。即先对select xx from xx的记录集合用where进行筛选,然后再使用group by 对筛选后的结果进行分组。
二.使用having字句对分组后的结果进行筛选,语法和where差不多:having 条件表达式
需要注意having和where的用法区别:
1.having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。
2.where肯定在group by 之前,即也在having之前。
3.where后的条件表达式里不允许使用聚合函数,而having可以。
三、当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是:
1.执行where xx对全表数据做筛选,返回第1个结果集。
2.针对第1个结果集使用group by分组,返回第2个结果集。
3.针对第2个结果集中的每1组数据执行select xx,有几组就执行几次,返回第3个结果集。
4.针对第3个结集执行having xx进行筛选,返回第4个结果集。
5.针对第4个结果集排序。
例子:
完成一个复杂的查询语句,需求如下:
按由高到低的顺序显示个人平均分在70分以上的学生姓名和平均分,为了尽可能地提高平均分,在计算平均分前不包括分数在60分以下的成绩,并且也不计算贱人(jr)的成绩。
分析:
1.要求显示学生姓名和平均分
因此确定第1步select s_name,avg(score) from student
2.计算平均分前不包括分数在60分以下的成绩,并且也不计算贱人(jr)的成绩
因此确定第2步 where score>=60 and s_name!=’jr’
3.显示个人平均分
相同名字的学生(同一个学生)考了多门科目 因此按姓名分组
确定第3步 group by s_name
4.显示个人平均分在70分以上
因此确定第4步 having avg(s_score)>=70
5.按由高到低的顺序
因此确定第5步 order by avg(s_score) desc
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
按照指定字段查询出出现重复的数据 SELECT m.* FROM dbo.Sheet1$ m,( SELECT ZCMC,ZCFL,XH FROM dbo.Sheet1$ GROUP BY ZCMC,ZCFL,XH HAVING COUNT(1)>1 ) AS m1 WHERE m.ZCMC=m1.ZCMC AND m.ZCFL=m1.ZCFL ...
1.表中有id和name 两个字段,查询出name重复的所有数据 select * from xi a where (a.username) in (select username from xi group by username having count(*) > 1) 2、查询出所有数据进行分组之后,和重复数据...
SQLServer 中将一个字段的多个记录值合并到一行显示的实现方法 SQL Server 是一种关系型数据库管理系统,具有强大的数据处理能力和存储能力。在实际应用中,我们经常需要将一个字段的多个记录值合并到一行显示,以...
MySQL中的GROUP BY语句是用于对数据库表中的数据进行分组的重要工具,它根据一个或多个字段的值将记录归类。在多个字段上使用GROUP BY可以帮助我们更精确地分析和汇总数据,这对于数据报告、统计分析以及业务决策至...
该表包含了多个字段,具体如下: - `id`: varchar(36),主键; - `log_time`: bigint(20) unsigned,日志时间; - `device_id`: int(11),设备ID; - `stb_id`: int(11),STB ID; - `region_id`: int(11) unsigned...
7. **视图**:视图是虚拟表,基于一个或多个表的查询结果。使用CREATE VIEW语句创建,如`CREATE VIEW view_name AS SELECT column1, column2 FROM table_name`。 8. **存储过程和函数**:这些是预编译的SQL语句集合...
这种方法尤其适用于需要比较多个字段的情况。 - 示例:`SELECT * FROM a JOIN a b ON a.id = b.id WHERE a.id ;` 2. **使用窗口函数**: - 使用窗口函数(如`ROW_NUMBER()`、`RANK()`或`DENSE_RANK()`)可以更加...
首先,`ORDER BY`用于指定查询结果的排序方式,可以基于一个或多个列进行升序(ASC)或降序(DESC)排序。然而,Oracle数据库的`ORDER BY`默认并不保证排序的稳定性。这意味着在相同排序键值的情况下,多次执行相同...
5. JOIN操作:当需要从多个表中获取信息时,JOIN语句就显得尤为重要。例如,`INNER JOIN`、`LEFT JOIN`、`RIGHT JOIN`和`FULL OUTER JOIN`可以将两个或更多表的数据合并在一起,根据指定的关联条件。 6. 分组和聚合...
根据给定的SQL Server存储过程代码片段,我们可以深入解析与SQL Server中的`GROUP BY`分组查询、存储过程以及分页技术相关的知识点。 ### SQL Server中的`GROUP BY`分组查询 `GROUP BY`子句在SQL查询语言中用于将...
- 如果需要确保多个字段的组合是唯一的,可以创建一个基于这些字段的复合唯一约束或索引。 6. **性能考虑** - 唯一约束在插入、更新和删除操作时会进行实时检查,可能会降低性能。而唯一索引则在查询时提供更快的...
在数据库查询中,`GROUP BY`是一个至关重要的语句,它允许我们根据一个或多个字段对数据进行分组,并对每个分组执行聚合操作。这篇文章将深入探讨`GROUP BY`的用法,以及如何结合其他数据库语言元素如`ORDER BY`和`...
2. 分组查询:`GROUP BY`语句按照一个或多个列对结果集进行分组,`HAVING`子句则在分组后进行条件筛选。 三、连接查询 1. 内连接:`INNER JOIN`返回两个表中匹配的记录,基于指定的连接条件。 2. 左连接:`LEFT ...
因为一个影片可能有多个语言版本,而一个语言也可能被多个影片使用,所以是多对多关系。虚线表示这种关系不是强制的,即并非所有film都需要有所有语言。 5. **SQL查询操作**: - 列出所有商店的详细信息:这通常...
当我们需要根据多个字段进行分组时,可以将这些字段都放在`GROUP BY`子句中。 **示例3:GROUP BY name, number** ``` SELECT name, number FROM test GROUP BY name, number; ``` 这种情况下,每个不同的`name`和...
当你需要根据多个字段的组合来分组数据时,可以在`GROUP BY`子句中列出这些字段。这种方式可以帮助你分析具有多重维度的数据,例如,你可能想根据产品类别和销售地区来统计销售额。 下面我们将详细讨论`GROUP BY`...
例如耽搁查询 的排序、连接、扫描和GROUP BY字句同时执行,SQL SERVER根据系统的负载情况决定最优的并行等级,复杂的需要消耗大量的CPU的查询最适合并行处理。但是更新操作UPDATE,INSERT, DELETE还不能并行处理。 ...
3. **@OrderField**: 排序字段,可以指定多个字段,以逗号分隔。 4. **@WhereCondition**: 查询条件,用于指定过滤条件。 5. **@PageIndex**: 当前页码,默认值为1。 6. **@PageSize**: 每页记录数,默认值为20。 7....
在SQL中,分组查询是通过`GROUP BY`子句来实现的,它可以将数据按照一个或多个列的值进行分组,通常结合聚合函数一起使用,以便对每个分组执行计算。 1. SQL中的分组查询 在SQL中,使用`GROUP BY`语句进行分组操作...