2016-08-05 3 views
1

最初の文字の同じを持ったときに、私はこのMYSQLの選択を解除行

| symbol | value | 
------------------- 
| test | 12 | 
| yes  | 8  | 
| test.m | 13 | 
| no  | 10 | 
| nah.m | 20 | 
| nah  | 17 | 

のようなテーブルを持っている私は、この

| symbol | value | 
------------------- 
| test | 13 | 
| yes  | 8  | 
| no  | 10 | 
| nah  | 20 | 

表を見れば、私はレコードのことを選択したいような結果が欲しいです最後の文字に ".m"があり、最後の文字に ".m"がなく、 ".m"を取り除いた重複がレコードにある場合。

誰でも私を助けることができますか?前もって感謝します。

+0

と値12とのテストのためでCASEとグループを使用することができますか..? – scaisEdge

+0

@scaisEdgeいいえ、 "test.m"の値を持つテストの場合 –

答えて

1

あなたは

select 
    case when locate('.', symbol)> 0 
       then sustr(symbol, 1, locate('.', symbol) -1) 
       else symbol 
     end as my_symbol, 
    max(value) 
from my_table 
group by my_symbol 
+0

'.m'の' value'は '.m'のない値より常に大きくなければなりませんか? – mnv

+0

私は、あなたが好きな集約関数を使うことができます。あなたの場合は12の代わりに11になります。 – mnv

+0

test.mに関連した値が必要ですか? – scaisEdge

2
select t1.symbol, coalesce(t2.value, t1.value) 
from t t1 
left join t t2 on t1.symbol = concat(t2.symbol, '.m') 
where t1.symbol not like '%.m' 
+0

良い答えです。しかし、常に 't1.symbol'でなければなりません。そして、ケース表現は '合体 'で簡単に書くことができます。したがって、 'select t1.symbol、coalesce(t2.value、t1.value)from ...'を選択します。 –

+0

ありがとうございます。編集されました。 – mnv

+0

残念なことに、最初のものが表示されますが、 ".m"値は表示されません –

関連する問題