如果我有一個數據表編號: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