【MySQL必知必会(十)】【分组数据】

上一篇:【MySQL必知必会(九)】【汇总数据】

+++++++++++++开始线++++++++++++++++

一、 数据分组

返回供应商1003提供的产品数目

mysql> SELECT COUNT(*) AS num_prods
    -> FROM products
    -> WHERE vend_id =1003;

在这里插入图片描述

二、 创建分组

mysql> SELECT vend_id, COUNT(*) AS num_prods
    -> FROM products
    -> GROUP BY vend_id;

在这里插入图片描述

关于GROUP BY的规定
1.GROUP BY子句可以包含任意数目的列
2.在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进行汇总
3.GROUP BY子句子句中列出的每个列都必须是检索列或有效的表达式
4.除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出
5.如果分组中具有NULL值,则NULL将作为一个分组返回。
6.GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前

三、 过滤分组

HAVING支持所有WHERE操作符

WHERE子句的条件和选项都是适用于HAVING,句法相同,关键字有差别

mysql> SELECT cust_id, COUNT(*) AS orders
    -> FROM orders
    -> GROUP BY cust_id
    -> HAVING COUNT(*) >= 2;

在这里插入图片描述

HAVING和WHERE的差别

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

列出具有两个以上、价格为10以上的产品的供应商

mysql> SELECT vend_id, COUNT(*) AS num_prods
    -> FROM products
    -> WHERE prod_price >= 10
    -> GROUP BY vend_id
    -> HAVING COUNT(*) >= 2;

在这里插入图片描述

mysql> SELECT vend_id,COUNT(*) AS num_prods
    -> FROM products
    -> GROUP BY vend_id
    -> HAVING COUNT(*) >= 2;

在这里插入图片描述

四、 分组和排序

检索总计订单价格大于等于 50的订单的订单号和总计订单价格

mysql> SELECT order_num, SUM(quantity*item_price) AS ordertotal
    -> FROM orderitems
    -> GROUP BY order_num
    -> HAVING SUM(quantity*item_price) >= 50;

在这里插入图片描述

按总价订单价格排序输出

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

+++++++++++++结束线++++++++++++++++

猜你喜欢

转载自blog.csdn.net/qq_42893334/article/details/108794901