Adams小乙

2022-01-27   阅读量: 410

数据库基础

SQL学习——分组数据:group by 和 having 子句的运用于区分

扫码加入数据分析学习群

在实际数据库表查询中,常常需要跟据需求将数据进行分类,而且不仅仅是返回结果那种,因此需要用到新的字句——GROUP BY子句和HAVING子句。

返回结果分类:

SELECT COUNT(*) AS num_prods

FROM Products WHERE vend_id = ‘DLL01’;

#返回供应商为“DLL01”的数量记为vend_id。

创建分组:SELECT语句中的GROUP BY 子句建立的;

Select vend_id, count(*) as num_prods from products group by vend_id;

#返回vend_id分组的列并且各组计数。

Group by 子句可以包含任意数目的列,因而可以对分组进行嵌套,更细致地进行数据分组;如果group by 子句中嵌套了分组,数据将在最后指定的分组上进行汇总。

Group by 子句中列出的每一列都必须是检索列或者有效的表达式。如果在select中使用表达式,则必须在group by子句中指定相同的表达式。

过滤分组:having子句;

Select cust_id, count(*) as orders from orders group by cust_id having count(*) >= 2;

返回按照cust_id 分组,然后计数各组数量,并返回数量大于2的cust_id及数量值。

值得注意的是:这行代码中,where子句并不能达到效果,因为having过滤记于的是分组聚合值而不是字段内容,where子句在select语句之前执行,所以只可以用having。

Having 和 where 的差别

Where 在数据分组前进行过滤,having 在数据分组后过滤,where过滤掉的值不会出现在分组中,而having基于计算结果过滤分组。

根据需要,可以对where 和 having 进行选用或者联用。


150.0497 7 0 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子