sql >> データベース >  >> RDS >> Mysql

mysql-複雑なステートメントに外部結合を適用する

    私はこれを達成するための1つの方法しか考えられません。 GROUP_CONCATの組み合わせ およびSUBSTRING_INDEX 現在の作業クエリについて。以下のクエリ例:

    SELECT    person_id,
              SUBSTRING_INDEX(GROUP_CONCAT(a.name ORDER BY a.score DESC),',',1) sname, 
              SUBSTRING_INDEX(GROUP_CONCAT(a.score ORDER BY a.score DESC),',',1) max_score FROM 
    (SELECT   people.person_id,
              names.name,
              CASE 
              WHEN people.person_default_name_id=names.name_id AND language_scripts.script_id = '1' THEN 3
              WHEN names.language_id = '1' THEN 2
              WHEN language_scripts.script_id = '1' THEN 1
              ELSE 0
              END AS score
    FROM      `people` 
    LEFT JOIN `names` ON names.person_id=people.person_id
    LEFT JOIN `languages` ON names.language_id = languages.language_id
    LEFT JOIN `language_scripts` ON languages.language_id = language_scripts.language_id) a 
    GROUP BY person_id;
    

    フィドルでもクエリをテストしました http://sqlfiddle.com/#!9 / 54ce8 / 33

    少し説明:

    1. GROUP_CONCAT 名前とスコアにORDER BYを追加 条件-ORDER BYに注意してください 両方のGROUP_CONCATで同一である必要があります 。
    2. SUBSTRING_INDEX フィールドでカンマ(、)で区切られた最初の値を取得します。


    1. タイムゾーン付きのPostgreSQLdate()

    2. pg gemのインストールに失敗すると、mkmf.rbはrubyのヘッダーファイルを見つけることができません(Mac OSX 10.6.5)

    3. パフォーマンスを向上させるために、依存サブクエリを結合に変換するにはどうすればよいですか?

    4. Hibernateで外部キーの生成された名前を変更する