如果我有一个数据表编号:SQL GROUP BY与集合
+------+------+------+------+
| colA | colB | colC | colD |
+------+------+------+------+
| 1 | 2 | 3 | 4 |
| 1 | 2 | 9 | 5 |
+------+------+------+------+
做:
select colA, colB, colC, MAX(colD) FROM Numbers GROUP BY colA, colB;
我认为,它应该由colA, colB
返回行2.群体,并挑选最大的一个在colD
。
不幸的是,这不起作用,因为您还必须由colC进行分组才能返回。
为什么?有没有另一种方法来做我想做的事情?
我想要colA
和colB
中相同的行,但是最大的一个在colD
。
这对于NATURAL JOIN来说是一个很好的用例。 – Benoit 2012-02-15 13:59:05
谢谢,并且非常感谢Benoit对这个问题进行了重构:)如果两个列名都相同,那么是否真的必须命名所有“on”:s? – momomo 2012-02-15 14:11:55
@Hamidam是的,只要其中一个不是主键,你确实需要所有列在'ON'子句中的。例如,如果'colA'是一个唯一的键值,那么你可以'ON tbl.colA = g.colA',但由于你的属性并不唯一,所以你需要组合必要的列数来创建一个唯一的值colA ,colB,MAX(colD)' – 2012-02-15 14:19:37