Получить максимальное значение запроса GROUP BY без подзапроса в mySQL - PullRequest
2 голосов
/ 27 августа 2009

У меня есть несколько запросов, которые группируют наборы данных и подсчитывают их, например,

  SELECT COUNT(*)
    FROM `table`
GROUP BY `column`

теперь у меня есть количество строк, для которых column одинаково, пока все хорошо.

Проблема в том, как мне получить агрегированные значения (min / max / avg / sum) для этих «сгруппированных» подсчетов. Конечно, проще всего использовать подзапрос, но мне было интересно, возможно ли это в этом единственном запросе

Ответы [ 3 ]

1 голос
/ 27 августа 2009

Для min и max вы можете ORDER BY и получить первый ряд. Для sum / avg / других агрегатов вам потребуется подзапрос.

0 голосов
/ 05 мая 2011
| date       | hits |
|-------------------|
| 2009-10-10 |    3 |
| 2009-10-10 |    6 |
| 2009-10-10 |    1 |
| 2009-10-10 |    3 |
| 2009-10-11 |   12 |
| 2009-10-11 |    4 |
| 2009-10-11 |    8 |

Я думаю, что Книттл пытался сделать что-то вроде этого:

select min(hits), max(hits), avg(hits), sum(hits)<br>
from table
group by date
0 голосов
/ 27 августа 2009

В MySQL вы должны сделать это одновременно. Мои тесты показывают, что это работает.

| date       | hits |
|-------------------|
| 2009-10-10 |    3 |
| 2009-10-10 |    6 |
| 2009-10-10 |    1 |
| 2009-10-10 |    3 |
| 2009-10-11 |   12 |
| 2009-10-11 |    4 |
| 2009-10-11 |    8 |
 -------------------

SELECT COUNT(*), MAX(hits), SUM(hits) FROM table GROUP BY date

| COUNT(*)  | MAX(hits) |
|-----------|-----------|
|        4  |         6 |
|        3  |        12 |
 -----------------------

SUM, MIN и AVG также работают. Это то, что вы ищете?

...