您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

MYSQL必知必会读书笔记 第十二和十三章 分组数据

2025/12/18 21:13:37发布13次查看
1.group by 可以包含任意数目的列2.group by 中每个列都必须是检索列或有效的表达式(但不能使聚集函数)3.除聚集函数外, select 语句中的每个列都必须在 group by 子句中出现 4. 如果分组列有 null , null 将作为一个分组返回 5. group by 子句必须出现在
1.group by 可以包含任意数目的列2.group by 中每个列都必须是检索列或有效的表达式(但不能使聚集函数)3.除聚集函数外,select语句中的每个列都必须在group by子句中出现4.如果分组列有null值,null将作为一个分组返回5.group by 子句必须出现在where子句之后, order by 之前where 和 have 的区别:where在分组前过滤,having在分组后过滤select vend_id ,count(*) as num_prods from products group by vend_id;group by子句指示mysql分组数据,然后对每个组而不是整个结果集进行聚集。在使用group by子句之前,需要知道一些重要的规定:1. group by 子句可以包含任意数目的列。这使得能对分组进行嵌套,为数据分组提供更细致的控制。2. 如果group by子句中嵌套了分组,数据将最后规定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算(所以不能从个别的列取回数据)3. group by 子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在select 中使用表达式,必须在group by子句中指定相同的表达式。不能使用别名。4.除聚集计算语句外,select 语句中的每个列都必须在group by 子句中给出。5.如果分组列中具有null 值,则将null作为一个分组返回6.group by 子句必须出现在where子句之后。order by 子句之前。注意:使用rollup 使用with rollup 关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)的值。select vend_id ,count(*) as num_prods from products groups by vend_id with rollup;二 :过滤分组我们已经看到了where 子句的作用,但是这个例子中where 不能完成任务。因为where过滤指定的行而不是分组。事实上where 没有分组的概念。mysql中为此目的提供了类似的语句,那就是having子句。having非常类似于where。事实上,目前为止所有学过的所有类型的where子句都可以用having来替代。唯一的差别是where过滤行,而having过滤分组。select cust_id,count(*) as orders from orders group by cust_id having count(*)>=2;注意:having 与where 的区别where 在数据分组前进行过滤,having在数据分组后进行过滤。这是一个重要区别,where排除的行不会出现在分组中。可能改变分组值,从而影响having子句中基于这些值过滤掉分组。为了更好的理解,请看下面一个例子,它列出具有2个以上,价格为10以上的产品的供应商。select vend_id,count(*) as num_prods from products where prod_price>=10 group by vend_id having count(*)>=2;需要注意的是:在使用group by 子句时,应该也给出order by子句。这保证数据正确排序的唯一方法。select order_num,sum(quantity*item_price) as ordertotal from orderitems group by order_num having sum(quantity* item_price)>=50 order by ordertotal;
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product