2011-10-03 91 views
4

我真的无法通过sql找到简单甚至是任何解决方案来从DB(mySQL)获取唯一数据。mySQL - 选择两列中的唯一值

我会给出一个样本(简体):

表T

fruit | color | weight 
----------------------- 
apple | red | 34 
kiwi | red | 23 
banana | yellow | 100 
kiwi | black | 3567 
apple | yellow | 23 
banana | green | 2345 
pear | green | 1900 

,现在我想输出 - 像不同的(苹果)和不同的(颜色)在一起,以便通过 重量递减:

kiwi | black | 3567 
banana | green | 2345 
apple | red | 34 
  • 梨|绿色//不好,因为绿色已经“使用”了
  • 香蕉|黄色//是不行的,因为香蕉已经“使用”

所以我不仅需要水果,而且颜色(所有独特)。

任何建议或解决方案?谢谢!

+2

您似乎想要独特的颜色,但您的示例结果似乎会完全随意决定如何选择颜色。您至少需要一个更重要的要求,如最轻或最重的独特颜色。 –

+0

保罗,对不起,我正在编辑文本。 – Rok

回答

0
SELECT fruit, color, weight 
FROM t 
GROUP BY fruit, color 
HAVING COUNT(*) = 1 
ORDER BY weight DESC 
+0

这是不正确的。我说你需要看两列而不只是一列。再看看例子。 – Rok

1

我不清楚为什么香蕉|绿色最好的香蕉|黄(改RIGHT JOININNER JOIN的美味水果),所以我希望我已经明白你想要做什么:

SELECT t1.fruit, t1.color, t1.weight 
FROM 
t AS t1 
RIGHT JOIN 
(
SELECT fruit, color, weight 
FROM t 
GROUP BY 
color 
) AS t2 
ON 
t1.fruit = t2.fruit AND t1.color = t2.color 
GROUP BY fruit 
ORDER BY weight DESC; 

另请注意MySQL如何处理hidden columns in GROUP BY