私はユーザーのテーブルを年齢別にグループ化していますが、各ユーザーも国籍を持ち、ユーザーの国籍の1つがUSの場合、レコードは、現在それが見つけた最初の国籍を取っているようです、どのように私はこのクエリを書くことができますか?それを行うにはmysql group byとグループ化された各レコードの値をフィルタリング
0
A
答えて
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人の米国人がいる場合は常に国籍が取得されます。
関連する問題
- 1. GROUP BYとMysql 5.7 - 間違ったグループ化
- 2. Linq group by +各グループのどこに
- 3. MySQLグループBy&Count ...ネストされたグループ化はできますか?
- 4. T-SQL GROUP BY:他のグループ化された列を含めるベストな方法
- 5. Mysql UNIONとGROUP BY
- 6. MySQL JOINとGROUP BY
- 7. GROUP BY MySQLでGROUP BYによって返された行の数
- 8. 結晶レポートのグループ化されたレコードをフィルタリングする
- 9. COUNT()、GROUP BYとNULL値は、MySQLクエリ
- 10. MySQL - count()とGROUP BYのランキング
- 11. MySQL SELECT GROUP BY
- 12. GROUP BY inverse(mysql)
- 13. UNION ALLでGROUP BYを使用すると結果がグループ化されない
- 14. ユニオンMYSQLのGROUP BY
- 15. MySQLのGROUP BYが
- 16. MySQL、GROUP BYのフィルタ
- 17. MySQLのGROUP BYステートメント
- 18. MySQLクエリでグループ化されたグループ
- 19. MySQL GROUP BY NULLとEMPTY
- 20. GROUP BY(MySQLとSQLサーバ)
- 21. MySQL GROUP BYとHAVING節
- 22. MYSQL GROUP BYとORDER BY with ABS
- 23. GROUP BY 1つのレコードで
- 24. MVCでLINQを使ったグループ化/ GROUP BY
- 25. mysqlの2つの列でグループ化されたレコードを検索
- 26. MySQL Group By Count Substring
- 27. MYSQL GROUP BYエラーcartodb
- 28. MySQL/PHP GROUP BY日
- 29. 'with'(Oracle SQL)内のグループ化された各値のカウント
- 30. MYSQL - GROUP BYの前に最新のレコードを返す
とwhere句をUSに追加しますか? – marc
申し訳ありませんが、私はあなたの質問を最初に理解していませんでしたが、今私はしました。だから私は私の答えを編集した – kynnysmatto