Mysql语法之分组数据

如何分组数据,以便能汇总表内容的子集。这涉及两个新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来替代。<u>唯一的差别是WHERE过滤行,而HAVING过滤分组。</u>

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

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

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

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

mysql>select vend_id, COUNT(/) AS num_prods from products <u>where prod_price>=10 group by</u> 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 要检索的行数
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这一篇最主要是记录下命令,方便以后查找 使用Mysql 创建数据库 create database mysql_t...
    Treehl阅读 602评论 0 0
  • (一)几个数据库相关的概念 1.数据库 数据库: 保存有组织数据的容器。 数据的所有存储、检索、管理和处理实际上是...
    快乐的小飞熊阅读 541评论 0 1
  • 表 存储在表中的数据是同一种类型的数据或清单。 数据库中的表有为一个名字来标识自己。 表具有一些特性,这些特性定义...
    蛐蛐囍阅读 1,338评论 0 7
  • Mysql 必知必会 查询 检索多个列SELECT prod_id, prod_name, prod_pri...
    yoomaz阅读 665评论 0 1
  • 1.表中的任何列都可以作为主键, 只要它满足以下条件:任意两行都不具有相同的主键值;每一行都必须具有一个主键值( ...
    Cherryjs阅读 757评论 0 0