我有一些查询将数据集分组并计算它们,例如
SELECT COUNT(*)
FROM `table`
GROUP BY `column`
现在我有相同的行数column
,到目前为止一切都很好。
问题是:我如何获得这些“分组”计数的聚合(最小/最大/平均/总和)值。使用子查询肯定是最简单的,但我想知道这是否可能在这个单一查询中
对于min
并且max
您可以ORDER BY
获取第一行。对于sum
/ avg
/其他聚合,您需要一个子查询。
在 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 也可以。这是你想要的?
| 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 |
我认为 knittl 试图做这样的事情:
select min(hits), max(hits), avg(hits), sum(hits)<br>
from table
group by date