Posted on:
Last modified:
Group by
用来按照某一列或者某几列的值聚合数据。group by x
按照 x 相同的值聚合,group by x, y
按照 x 和 y 都相同的值聚合。而查询的列要么是聚合的列,要么应该通过聚合函数来选取一列。而且所有的 null 会被聚合成一行。
在 SQL 规范中,只能查询 group_by 的字段,如果查询其他字段,这种行为是未定义的。
比如说下面的数据表中
-- How many countries are in each continent?
select
continent
, count(*)
from
countries
group by
continent
执行查询可以得到每个洲的国家的数量。
在 SQL 中,Where 子句是在 group 子句之前运行的,所以我们无法通过 where 来过滤 group 之后的结果,而应该使用 having 子句来过滤。
select
continent
, max(area)
from
countries
group by
1
having
max(area) >= 1e7
当你没有使用 group by
,而使用了 max、min、count 等聚合函数的时候已经在聚合了
-- What is the largest and average country size in Europe?
select
max(area) as largest_country
, avg(area) as avg_country_area
from
countries
where
continent = "Europe"
如果在查询中有没有聚合的列,那么 MySQL 就会随机选取一个列,比如下面就会随机选取一个州。总之,这个行为是未定义的,不要这么查询。
select
country
, state
, count(*)
from
countries
group by
country
© 2016-2022 Yifei Kong. Powered by ynotes
All contents are under the CC-BY-NC-SA license, if not otherwise specified.
Opinions expressed here are solely my own and do not express the views or opinions of my employer.
友情链接: MySQL 教程站