sql中 order by 和 group by的区别

1.概述

在SQL数据库中,order by和group by这两个关键字是常用的用于排序和分组的操作。这两个关键字是SQL语言中比较基础的操作,但是对于初学者来说,两者之间的区别可能不是很明显,本文将主要介绍这两个关键字的区别。

2.order by

2.1 简介

order by关键字用于对查询结果进行排序,通常使用asc(升序)或desc(降序)关键字来指定排序方式。order by 子句中可以出现列名、表达式和函数。

2.2 示例

以下代码给出了一个使用order by按照列名排序的例子。下面的例子是搜寻古诗中的作者的,并按照作者名字的字母顺序对结果排序。

SELECT * FROM poetry

WHERE author IN ('李白','杜甫','白居易','王之涣','孟浩然','柳宗元')

ORDER BY author ASC;

执行这条SQL语句的结果将是像这样的:

id title author content
23 登高 李白 风急天高猿啸哀,渚清沙白鸟飞回。无边落木萧萧下,不尽长江滚滚来。万里悲秋常作客,百年多病独登台。艰难苦恨繁霜鬓,潦倒新停浊酒杯。
71 赤壁 杜甫 折戟沉沙铁未销,自将磨洗认前朝。东风不与周郎便,铜雀春深锁二乔。咸阳古道音尘绝,北国风光旧照今。
113 琵琶行 白居易 大漠沙如雪,燕山月似钩。何当金络脑,快走踏清秋。
141 登鹳雀楼 王之涣 【唐】王之涣 白日依山尽,黄河入海流。欲窮千里目,更上一層樓。
259 春晓 孟浩然 春眠不觉晓,处处闻啼鸟。夜来风雨声,花落知多少。
438 赋得古原草送别 柳宗元 离离原上草,一岁一枯荣。野火烧不尽,春风吹又生。远芳侵古道,晴翠接荒城。又送王孙去,萋萋满别情。

3.group by

3.1 简介

group by关键字用于将查询结果分组,通常伴随着分组查询函数(例如count、sum、avg等)的使用,并且需要在查询语句中指定分组的列名。group by 关键字也可以与聚合函数一起使用,从而计算每个组的聚合值。

3.2 示例

以下代码给出了对搜寻古诗中包含“山水”的前5个作者名字,以及他们的诗作数目的例子:

SELECT author, COUNT(*) AS count

FROM poetry

WHERE content LIKE '%山水%'

GROUP BY author

ORDER BY count DESC

LIMIT 5;

执行这条SQL语句的结果将是像这样的:

author count
李白 14
杜甫 12
孟浩然 4
柳宗元 3

在这个例子中,我们首先在诗歌内容中查找包含“山水”字眼的诗歌,然后通过group by关键字按照作者名字对这些诗歌进行了分组。因为我们在查询语句中使用了count函数来计算每个组(作者)的诗歌数量,所以最后结果中会显示每个作者写作中包含“山水”的诗歌数量。

4.order by 和 group by 的区别

order by和group by都是对结果集进行操作的关键字,但是两者之间的区别是很大的。

区别如下:

4.1 操作结果不同

order by关键字用于对查询结果进行排序,而group by关键字则用于将查询结果进行分组。

4.2 使用场合不同

order by关键字通常用于那些查询结果需要排序的场合,而group by关键字则通常用于需要对查询结果进行分组计算的场合。

4.3 执行顺序不同

order by关键字的执行顺序晚于group by关键字。

group by关键字用于聚合数据,对于满足条件的记录进行分组操作,group by的结果就会变成一个表,这个表里面的数据就可以使用order by进行排序,也就是说order by是对分组后的结果集进行排序的。

5.总结

本文从简介和示例入手,详细介绍了order by和group by在SQL数据库中的不同,分别从操作结果、使用场合、执行顺序等几个方面进行了分析。虽然order by和group by在语义上有所区别,但是经常在查询语句中同时使用,从而实现更加高级的数据排序和分组计算操作。

数据库标签