2012-02-26 83 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)