Oracle的平均值函數AVG可以計算一個數值列的平均值,但是在某些情況下我們需要滿足特定條件后再計算平均值,這時候我們就可以用到AVG函數的IF語句。
舉個例子,假設我們有一個客戶訂單的表ORDER_ITEMS,其中有商品名稱、銷售價格及銷售數量等信息。我們需要計算商品名稱為'Apple'的平均銷售價格,AVG函數可以如下使用:
SELECT AVG(sale_price) FROM order_items WHERE product_name = 'Apple';
但是,如果我們需要計算的是商品名稱為'Apple'且銷售數量大于100的平均銷售價格,就可以使用AVG函數的IF語句:
SELECT AVG(CASE WHEN quantity>100 THEN sale_price ELSE NULL END) FROM order_items WHERE product_name = 'Apple';
上面的代碼中,CASE語句用來判斷銷售數量是否大于100,如果是,則計算銷售價格,否則返回NULL。AVG函數只會計算非空值的平均值。
除了使用CASE語句,我們還可以使用DECODE函數來實現平均值函數的IF條件,例如:
SELECT AVG(DECODE(product_name,'Apple',sale_price,NULL)) FROM order_items WHERE quantity>100;
這段代碼中,DECODE函數用來判斷商品名稱是否為'Apple',如果是,則返回銷售價格,否則返回NULL。AVG函數同樣只會計算非空值的平均值。
總之,AVG函數的IF語句可以幫助我們在統計平均值時滿足特定的條件,使得結果更加精確。當然,除了AVG函數,其他的聚合函數MIN、MAX、SUM等都可以使用IF語句來實現更加精細的統計。