SQL GROUP BY与聚合

mom*_*omo 2 mysql sql postgresql

如果我有一个包含数据的表格数字:

+------+------+------+------+
| colA | colB | colC | colD |
+------+------+------+------+
|    1 |    2 |    3 |    4 |
|    1 |    2 |    9 |    5 |
+------+------+------+------+
Run Code Online (Sandbox Code Playgroud)

并做:

select colA, colB, colC, MAX(colD) FROM Numbers GROUP BY colA, colB;
Run Code Online (Sandbox Code Playgroud)

我相信它应该返回第2行.它分组colA, colB并选择最大的一个colD.

不幸的是,这不起作用,因为你还必须按照colC进行分组才能返回它.

为什么?有没有其他方法可以做我想做的事情?

我想在同一行colAcolB,但最大的中的一个colD.

Mic*_*ski 5

有几种方法可以解决这个问题.也许最简单的是JOIN针对执行该colA, colB组的子查询,并从中找到完整的相应行.

SELECT 
  tbl.colA,
  tbl.colB,
  tbl.colC,
  tbl.colD
FROM tbl JOIN (
  SELECT
    colA,
    colB,
    MAX(colD) AS maxD
  FROM tbl
  GROUP BY colA, colB
) g ON tbl.colA = g.colA AND tbl.colB = g.colB AND tbl.colD = g.maxD
Run Code Online (Sandbox Code Playgroud)