【发布时间】:2022-01-19 09:14:00
【问题描述】:
我正在尝试获取字段的最大计数。 这就是我得到的,也是我试图做的。
| col1 | col2 |
| A | B |
| A | B |
| A | D |
| A | D |
| A | D |
| C | F |
| C | G |
| C | F |
我正在尝试获取col2 的最大出现次数,按col1 分组。
通过这个查询,我得到了按col1 和col2 分组的事件。
SELECT col1, col2, count(*) as conta
FROM tab
WHERE
GROUP by col1, col2
ORDER BY col1, col2
我得到:
| col1 | col2 | conta |
| A | B | 2 |
| A | D | 3 |
| C | F | 2 |
| C | G | 1 |
然后我使用此查询来获取最大计数:
SELECT max(conta) as conta2, col1
FROM (
SELECT col1, col2, count(*) as conta
FROM tab
WHERE
GROUP BY col1, col2
ORDER BY col1, col2
) AS derivedTable
GROUP BY col1
我得到:
| col1 | conta |
| A | 3 |
| C | 2 |
我缺少的是col2 的值。我想要这样的东西:
| col1 | col2 | conta |
| A | D | 3 |
| C | F | 2 |
问题是,如果我尝试选择 col2 字段,我会收到一条错误消息,我必须在 group by 或聚合函数中使用此字段,但在 group by 中使用它不是正确的方法.
【问题讨论】:
-
PostGreSQL 是否有具体说明为什么您的第二个查询不起作用?我尝试了完全相同的一个(缺少 col2,中间没有
WHERE,我在 MySQL 上没有收到任何错误消息。 -
使用 MySQL 可以获得不在 group by 中的字段,即使 select 中有另一个字段的聚合。在 PostgreSQL 中这是不可能的,如果您在 select 中有聚合和其他字段,则此字段必须在聚合本身或 group by 中。
标签: sql postgresql count aggregate greatest-n-per-group