[MYSQL -13]過濾分組

VictorLeeLk發表於2017-09-16
  • 目前為止的所有計算都是在表的所有資料或匹配特定的WHERE子句的資料上進行的。
  • 分組允許資料分為多個邏輯組,以便能對每個組進行聚集計算。
  • GROUP BY子句指示MYSQL分組資料,然後對每個組而不是整個結果集進行聚集。
  • GROUP BY必須出現在WHERE子句之後,ORDER BY子句之前。
  • WHERE過濾行,HAVING 過濾分組。

資料分組

SELECT vend_id,COUNT(*) AS num_prods
FROM products
GROUP BY vend_id;
  • GROUP BY子句中列出的每個列都必須是檢索列或有效的表示式(但不能是聚集函式)。如果在SELECT中使用表示式,則必須在GROUP BY子句中指定相同的表示式。不能使用別名。
  • 如果分組列中具有NULL值,則NULL將作為一個分組返回。如果有多行NULL值,它們將分為一組。

過濾分組

select cust_id,count(*) as orders from orders group by cust_id having count(*)>=2;
######
#列出具有2個以上,價格大於10的產品的供應商。
######
select vend_id,count(*) as num_prods 
        from products 
        where prod_price >=10
        group by vend_id
        having count(*)>=2;

分組和排序

                          GROUP BY與GROUP BY差別
ORDER BY GROUP 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;

相關文章