Неагрегированное среднее в MySQL? - PullRequest
2 голосов
/ 26 февраля 2012

Можно ли рассчитать среднее значение результатов, возвращаемых подзапросом, без использования агрегированных функций?

Гипотетический пример:

Я хочу выбрать максимальный максимальный счет за месяц для каждого аккаунта,Я хотел бы иметь возможность сделать что-то вроде этого:

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

1 Ответ

2 голосов
/ 26 февраля 2012

Среднее по определению является агрегирующей функцией, поскольку она должна работать с совокупностью данных.

Чтобы получить то, что вы хотите, я бы сделал:

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)
...