2012-02-26 86 views
2

有沒有方法可以計算子查詢返回的結果的平均值而不使用聚合函數?MySQL中的非聚合平均值?

假設的例子:

我想選擇在一個月內爲每個帳戶平均最高發票。我希望能夠做到這樣的事情:

SELECT 
    accounts.*, 
    **AVERAGE**(SELECT MAX(`amount`) 
       FROM invoices 
       WHERE invoices.account_id = accounts.id 
       GROUP BY invoices.month) as `average_max` 

回答

2

平均根據定義是一個聚合函數,因爲它需要操作一個數據集合。

爲了得到你想要的我會做什麼:

SELECT 
    accounts.*, avg_amount.amount AS avg_amount 
FROM 
    accounts 
LEFT JOIN (
    SELECT account_id, AVG(amount) AS amount FROM (
    SELECT month, account_id, MAX(amount) AS amount FROM invoices GROUP BY month, account_id 
) AS max_amount USING(account_id) 
) AS avg_amount ON (accounts.id = avg_amount.account_ID)