创建分组
分组是在select语句的group by字句中建立的。
举例:select vend_id, count(*) as num_prods from products group by vend_id;
结果:
在具体使用group by字句前,需要知道一些重要的规定。
- group by字句可以包含任意数目的列。这使得能对分组进行嵌套,为数据分组提供更精细化的控制。
- 如果在group by字句中嵌套了分组,数据将在最后规定的分组上进行汇总。
- group by字句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在select中使用表达式,则必须在group by字句中指定相同的表达式。不能使用别名。
- 如果分组列中具有null值,则null将作为一个分组返回。
- group by字句必须出现在where字句之后,order by字句之前。
过滤分组
过滤分组使用having
having和where的差别:where在数据分组前进行过滤,having在数据分组后进行过滤。
举例:select vend_id, count(*) as num_prods from products where prod_price >= 10 group by vend_id having count(*) >=2
说明:列出具有2个(含)以上、价格为10(含)以上产品的供应商
select 字句顺序
一下为select 语句中使用必须遵循的次序:
字句 说明 是否必须使用
select 要返回的列或表达式 是
from 从中检索数据的表 仅在从表选择数据时使用
where 行级过滤 否
group by 分组说明 仅在按组计算聚集是使用
having 组级过滤 否
order by 输出排序顺序 否
limit 要检索的行数 否
参考书籍:
- MySQL必知必会