我有一个表有多个列,只想找到A和B的组合不同的表。一个DISTINCT问题
可能有几个这样的行,我想为每个A和B的不同组合的行的每个字段(假设也有列C和D)。
澄清:
我想这样说
for each distinct A/B combination
get C and D
我有一个表有多个列,只想找到A和B的组合不同的表。一个DISTINCT问题
可能有几个这样的行,我想为每个A和B的不同组合的行的每个字段(假设也有列C和D)。
澄清:
我想这样说
for each distinct A/B combination
get C and D
这听起来像它应该使用GROUP BY来解决,但也可能可能是因为被这个问题所指定的UNION:
使用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子句中的列返回。
+1,演示优越的sql fu :) – 2011-05-30 04:01:46
不应该是'有计数(*)= 1'吗?我可能会误解这个问题,但这听起来只有具有不同值('a,b')的行才需要。 – a1ex07 2011-05-30 04:13:22
@ a1ex07:我以为OP希望不同的对具有重复 - 是不是“每个不同组合的几行”推断出什么? – 2011-05-30 04:15:23
你没有回答哪一行的问题,以显示当你有两排,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
高兴的更新,但人们谁回答不会收到有关您的更改的警报。 – 2011-05-30 06:04:08