2011-01-25 23 views

答えて

0

一つの方法は、次のようになります。これは何が行うことGROUP_CONCATが1歳のすべての国籍を組み合わせて、それが彼らの間で文字列「米国」を見つけた場合、それは「米国」を返すということです

SELECT *, IF(INSTR(GROUP_CONCAT('--', nationality, '--'), '--US--'), 
      'US', nationality) 
FROM table GROUP BY age; 

とそれ以外の場合は通常どおり国籍を返します。また、「US」を「 - US--」にするために、国籍の始めと終わりに「 - 」を追加します。あなたがそれをしなかった場合、クエリはまた、連続する文字「US」を含む他の国籍が米国を意味すると考えるでしょう。しかし、これらの ' - '文字は内部でのみ使用され、最終結果には表示されません。


編集:もう一つの(クリーナーが、より長い)の方法は、私の心に入ってきた。だから、

SELECT * FROM (SELECT * FROM table WHERE nation='US' 
       UNION 
       SELECT * FROM table WHERE nation!='US') AS tmp 
GROUP BY age; 

、最初にその国籍米国ではない人物を選択して、これら二つを組み合わせて、その後、その国籍米国で人物を選択人のセットは、最初の人が米国や他の人から来ている順序で人のテーブルを取得するように。その後、そのテーブルにGROUP BY操作を実行すると、その年齢で少なくとも1人の米国人がいる場合は常に国籍が取得されます。

+0

とwhere句をUSに追加しますか? – marc

+0

申し訳ありませんが、私はあなたの質問を最初に理解していませんでしたが、今私はしました。だから私は私の答えを編集した – kynnysmatto

関連する問題