+++++++++++++开始线++++++++++++++++
一、 数据分组
返回供应商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
+++++++++++++结束线++++++++++++++++