2011-05-30 50 views
4

我有一個表有多個列,只想找到A和B的組合不同的表。一個DISTINCT問題

可能有幾個這樣的行,我想爲每個A和B的不同組合的行的每個字段(假設也有列C和D)。


澄清:

我想這樣說

for each distinct A/B combination 
    get C and D 
+1

高興的更新,但人們誰回答不會收到有關您的更改的警報。 – 2011-05-30 06:04:08

回答

6

使用EXISTS:

SELECT a.c, a.d 
    FROM YOUR_TABLE a 
WHERE EXISTS (SELECT NULL 
       FROM YOUR_TABLE b 
       WHERE b.a = a.a 
        AND b.b = a.b 
      GROUP BY b.a, b.b 
       HAVING COUNT(*) > 1) 

使用JOIN:

SELECT a.c, a.d 
    FROM YOUR_TABLE a 
    JOIN (SELECT b.a, b.b 
      FROM YOUR_TABLE b 
     GROUP BY b.a, b.b 
     HAVING COUNT(*) > 1) x ON x.a = a.a 
           AND x.b = a.b 

EXISTS可能是最好,如果你不打算從派生表的SELECT子句中的列返回。

+0

+1,演示優越的sql fu :) – 2011-05-30 04:01:46

+0

不應該是'有計數(*)= 1'嗎?我可能會誤解這個問題,但這聽起來只有具有不同值('a,b')的行才需要。 – a1ex07 2011-05-30 04:13:22

+0

@ a1ex07:我以爲OP希望不同的對具有重複 - 是不是「每個不同組合的幾行」推斷出什麼? – 2011-05-30 04:15:23

1

你沒有回答哪一行的問題,以顯示當你有兩排,A和B相同的值。例如:

A B C D 
============= 
0 1 5 5 
0 1 4 7 
0 0 1 1 

如果你想A和B的只有唯一實例,應該返回C = 5,D = 5還是C = 4,D = 7?如果您可以決定如何使用聚合函數返回值,則可以在C和D列上使用GROUP BY A, B子句和聚合方法。

例如,以下將返回C的最大價值和d:

SELECT A, B, MAX(C), MAX(D) 
FROM  myTable 
GROUP BY A, B 

有關集合函數的完整列表,請訪問此網站:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html