2012-03-01 6 views
0

私は以下の表を持っている:MySQL次のクエリで最大値または最大値のみを表示するにはどうすればよいですか?

mysql> select * from F_FINDINGS; 
+---------+------------+ 
| F_ID | CONFIDENCE | 
+---------+------------+ 
|  1 |  100 | 
|  2 |   70 | 
|  2 |  0.35 | 
|  1 |  100 | 
+---------+------------+ 

mysql> select * from F_THINGS; 
+---------+-------------------+--------+------------+ 
| F_ID | F_TITLE  | S_ID | F_VALUE | 
+---------+-------------------+--------+------------+ 
|  1 | STUFF A   |  1 |  1.1 |  
|  2 | STUFF C   |  1 |  202.2 | 
|  3 | OBJECT P   |  1 |  10.7 |   
|  4 | Things X   |  2 |  540 | 
|  5 | STUFF D   |  2 |  1080 | 
|  6 | OBJECT M   |  2 |  455 |  
|  7 | Things A   |  3 |  333 |    
|  8 | Things B   |  4 |  825 |   
|  9 | STUFF A   |  1 |  103.4 |   
|  10 | STUFF A   |  1 |  98.4 | 
+---------+-------------------+--------+------------+ 

    mysql> select * from DUMP; 
    +--------+----------+ 
    | D_ID | D_NAME | 
    +--------+----------+ 
    |  1 | E0  | 
    |  2 | A1  | 
    |  3 | AB  | 
    +--------+----------+ 

mysql> select * FROM STUFF; 
+--------+--------+-------------------+ 
| S_ID | D_ID | S_TITLE   | 
+--------+--------+-------------------+ 
|  1 |  1 | plastic   | 
|  2 |  2 | metal    | 
|  3 |  3 | wood    | 
|  4 |  3 | gel    | 
+--------+--------+-------------------+ 

私は次のクエリに

SELECT 
d.D_NAME, 
s.S_TITLE, 
f.F_VALUE, 
IF(r.CONFIDENCE IS NULL, 'N/A', CONCAT((r.CONFIDENCE),'%')AS CONFIDENCE 

FROM F_THINGS f 

JOIN STUFF s ON s.S_ID=f.S_ID 
JOIN DUMP d on d.D_ID=s.D_ID 

LEFT JOIN F_FINDINGS r ON f.F_ID=r.F_ID; 

希望の結果使用しています:私だけのために示した最高値をしたい

+----------+-----------+------------+------------+ 
| D_NAME | S_TITLE | F_VALUE | CONFIDENCE | 
+----------+-----------+------------+------------+ 
| E0  | plastic |  202.2 | 70%  | 
| E0  | plastic |  10.7 | N/A  | 
| E0  | plastic |  1.1 | 100%  | 
| A1  | metal |  540 | N/A  | 
| A1  | metal |  1080 | N/A  | 
| A1  | metal |  455 | N/A  | 
| AB  | wood  |  333 | N/A  | 
| AB  | wood  |  825 | N/A  | 
| E0  | gel  |  103.4 | N/A  | 
| E0  | gel  |  98.4 | N/A  | 
+----------+-----------+------------+------------+ 

を各

+0

"STUFF"サンプルデータはどこにありますか...また、最高値ですか?または最高の信頼?ちょうど確認してください – DRapp

+0

@ DRapp 'stuff'テーブルを追加します。私はそれを残して申し訳ありません。私は最高の信頼をしたい – stackoverflow

+0

@VAShhh希望の出力は、 'Desired Results'と書かれている一番下に記載されています – stackoverflow

答えて

1

にご

LEFT JOIN F_FINDINGS r ON f.F_ID=r.F_ID; 

を変更しますそれを行うべきですが、STUFFには値がありません。あなたの望む結果(「ゲル」と「プラスチック」は同じS_IDとD_IDが必要ですが、やはり異なっています)を与えてください。あなたがSTUFFを追加することも次回はそう誰もそれ;-)

SELECT 
d.D_NAME, 
s.S_TITLE, 
f.F_VALUE, 
IF(MAX(r.CONFIDENCE) IS NULL, 'N/A', CONCAT((MAX(r.CONFIDENCE)),'%')) AS CONFIDENCE 
FROM F_THINGS f 
JOIN STUFF s ON s.S_ID=f.S_ID 
JOIN DUMP d on d.D_ID=s.D_ID 
LEFT JOIN F_FINDINGS r ON f.F_ID=r.F_ID 
GROUP BY D_NAME, S_TITLE, F_VALUE; 

デモhereをリバースエンジニアリングすることがありません。

また、必要なグループ化を可能にするために、F_THINGSの値を修正したデモを追加しました(ゲルとプラスチックでグループ化したいラインで異なるS_ID)here

+0

ありがとうJoachim Isaksson – stackoverflow

+0

私は完全に"グループ "の基本的な側面を理解していないかもしれませんが、なぜそれが最高のものだけを表示しますか? (結局私の後ろにあったものです) – stackoverflow

+1

@ Gah_Jamn-itグループは、同じD_NAME、S_TITLE、F_VALUEの行から成ります。信頼できるMAXが各グループで最高を示します。 –

1

信頼DESC

試し...

ORDERは、クエリの最後の行として

+0

それぞれに最大値が必要です。すべての注文は表示されます – stackoverflow

+0

について: 'ORDER BY DESC LIMIT 1' – Travesty3

+0

おそらく団体でこれをグループで結びます – user466764

0

は、それからちょうどこの

LEFT JOIN (select F_ID, MAX( CONFIDENCE) as Confidence 
       from F_Findings 
       group by F_ID) as r 
    on F.F_ID = r.F_ID 
関連する問題