Sql order by 和 group BY 如何共同运用?
1、如果声明了 GROUP BY 子句,输出就分成匹配一个或多个数值的不同组里。如果出现了 HAVING 子句,那么它消除那些不满足给出条件的组。
2、如果声明了 ORDER BY 子句,那么返回的行是按照指定的顺序排序的。如果没有给出 ORDER BY,那么数据行是按照系统认为可以最快生成的方法给出的。
例如:
select name,count(*) number
from users
group by name
order by 2 desc
查询users表中,相同姓名的人有多少个,按照重名次数最多的人名从多而少排列。
扩展资料:
GROUP BY 和 ORDER BY一起使用时,ORDER BY要在GROUP BY的后面。
group by a,b,c 则a,b,c三个字段是按照先按a字段对数据行进行排序,再按b字段对那些字段a为同一个值的数据行进行排序,再再按c字段对那些字段a为同一个值且字段b为同一个值的数据行进行排序
order by a,b,c 也是如此
故而
表T 有a,b,c三个字段,按a分组再按c排序的方法如下:
select * from T order by a,c//两个字段顺序不能颠倒
或者
select * from T group by a,c//两个字段顺序不能颠倒
select name,count(*) number
from users
group by name
order by 2 desc
查询users表中,相同姓名的人有多少个,按照重名次数最多的人名从多而少排列
然后再order by
order by 总是应该最后执行的.
如果声明了 ORDER BY 子句,那么返回的行是按照指定的顺序排序的。 如果没有给出 ORDER BY,那么数据行是按照系统认为可以最快生成的方法给出的。
虽然 SELECT 语句的完整语法较复杂,但是其主要的子句可归纳如下:
SELECT select_list
[ INTO new_table ]
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
可以在查询之间使用 UNION 运算符,以将查询的结果组合成单个结果集。
也就是说,order by放在最后面。