兩小段程式碼徹底學會having子句和where子句

NO IMAGE

兩小段程式碼徹底學會having子句和where子句

兩者都用於過濾
過濾 = 從所有的裡面篩選出符合條件的那些
where過濾 = 從所有的記錄裡面篩選出符合條件的那些記錄
having過濾 = 從所有的組裡面篩選出符合條件的那些組

只返回訂單表中訂單數量超過2個的每一個顧客的訂單數量

1 返回訂單表中每一位顧客的訂單數量
  SELECT cust_id,COUNT(*) AS num_orders
  FROM Products
  GROUP BY cust_id;
2 篩選出訂單數量超過兩個的那些顧客
  HAVING COUNT(*) > 2;

先按顧客將所有記錄進行分組
然後再統計出每組的記錄總數
最後篩選出記錄總數超過2的那些小組 
最終顯示出那些小組及那些小組的記錄總數

3 SELECT cust_id,COUNT(*) AS num_orders
  FROM Products
  GROUP BY cust_id
  HAVING COUNT(*) > 2;

返回產品表中每一供應商的產品中價格高於4的且總量超過2的產品的總量
有點複雜

返回產品表中每一供應商的產品總量超過2的產品的總量

還有點複雜

返回產品表中每一供應商的產品總量
這個好弄:
SELECT vend_id,COUNT(*) AS num_items
FROM Products
GROUP BY vend_id;

變簡單了:
返回產品表中每一供應商的產品總量超過2的產品的總量
於是:
SELECT vend_id,COUNT(*) AS num_items
FROM Products
GROUP BY vend_id
HAVING COUNT(*) > 2

變簡單了
返回產品表中每一供應商的產品中價格高於4的且總量超過2的產品的總量
於是
SELECT vend_id,COUNT(*) AS num_items
FROM Products
WHERE prod_price > 4
GROUP BY vend_id
HAVING COUNT(*) > 2

思路:先過濾行再過濾組

先過濾出價格高於4的所有記錄
然後在這些記錄中按生產商進行分組
再之後統計出每組的記錄總數
最後篩選出記錄總數超過2的那些組
最終顯示那些組合那些組中的記錄總數