mysql分组语句的子句_Mysql语法之分组数据

本文详细介绍了如何使用SQL的GROUP BY和HAVING子句对数据进行分组和过滤,以获取汇总的子集。GROUP BY用于创建数据分组,而HAVING则用于在分组后过滤数据,类似于WHERE但作用于分组。通过示例查询,阐述了这两个子句的使用方法,包括与WHERE子句的区别,以及在实际查询中如何结合使用它们。同时强调了ORDER BY在分组查询中的重要性,确保数据正确排序。
摘要由CSDN通过智能技术生成

如何分组数据,以便能汇总表内容的子集。这涉及两个新SELECT语句子句,分别是GROUP BY子句和HAVING子句。

一、数据分组

分组允许把数据分为多个逻辑组,以便能对每个组进行聚集计算。

二、创建分组

分组是在SELECT语句的GROUP BY 子句中建立的。

来看例子理解:

mysql>select vend_id,COUNT(*) AS num_prods from products group by vend_id;

也就是不同的Id的商品总数都能分别查出来。

三、过滤分组

除了能用GROUP BY分组数据外,Mysql还允许过滤分组,规定包括哪些分组,排除哪些分组。

也就是HAVING子句。

HAVING非常类似于WHERE。事实上,目前为止所学过的所有类型的WHERE子句都可以用HAVING来替代。唯一的差别是WHERE过滤行,而HAVING过滤分组。

mysql>select cust_id,COUNT(/) AS orders from orders GROUP BY cust_id HAVING COUNT(/) >=2;

注意:这里HAVING换成WHERE是不管用的。HAVING针对于分组。

WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。

那么咱么看看怎么混合WHERE和HAVING。

mysql>select vend_id, COUNT(/) AS num_prods from products where prod_price>=10 group by vend_id HAVING COUNT(/) >=2;

四、分组和排序

不要忘记ORDER BY ,一般在使用GROUP BY 子句时,应该也给出ORDER BY 子句。这是保证数据正确排序的唯一方法。千万不要仅依赖GROUP BY排序数据。

mysql>select order_num,SUM(quantity*item_price) AS ordertotal

from orderitems

GROUP BY order_num

HAVING SUM(quantity*item_price) >=50

order by ordertotal;

五、SELECT子句顺序

子句

说明

是否必须使用

SELECT

要返回的列或表达式

FROM

从中检索数据的表

仅在从表选择数据时使用

WHERE

行级过滤

GROUP BY

分组说明

仅在按组计算聚集时使用

HAVING

组级过滤

ORDER BY

输出排序顺序

LIMIT

要检索的行数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值