2011-10-03 10 views
4

DB(mySQL)から一意のデータを取得するために、SQLを使用して単純なソリューションまたはSQLのソリューションを実際に見つけることはできません。mySQL - 2つの列で一意の値を選択

私は(簡体字)のサンプルを提供します:

テーブル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 

そして今、私は、出力したい - 重量DESCによって異なった(りんご)のようなものと異なった(色)を一緒にと注文を:

kiwi | black | 3567 
banana | green | 2345 
apple | red | 34 
  • 梨|グリーン//は既に緑色が既に使用されているのでOKではない
  • バナナ|黄色// //バナナは既に "使用済み"なので

私はフルーツでグループ分けする必要はなく、色(すべて一意)も必要です。

アドバイスや解決策はありますか?ありがとう!

+2

あなたは別の色をしたいようですが、あなたの例の結果は、色がどのように選択されているかについて完全に恣意的な決定を下すようです。最も軽いまたは重い固有の色など、少なくとも1つ以上の要件が必要です。 –

+0

Paul、申し訳ありませんが、私はテキストを編集していました。 – Rok

答えて

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

これは正しくありません。私はあなたが両方の列を見なければならないと言っただけではない。もう一度例を見てください。 – Rok

1

バナナ、なぜ私は明確ではないよ|緑がバナナに好まれる|黄色(おいしくフルーツのためのINNER JOINに変更RIGHT 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を処理する方法にも注意してください。

関連する問題