HackerRankからthis challengeを完成します。LEFT JOINは、MySQLでNULLを指定した場合と同じように動作しません。
それが求められ:
ピボットを職業における職業列それぞれの名前をアルファベット順にソートされ、それに対応する職業の下に表示されるようになっています。出力列ヘッダーは、それぞれDoctor、Professor、Singer、およびActorでなければなりません。
これは、このデータのテーブルが含まれます。
私たちは、それぞれの名前がアルファベット順にソートされ、それに対応する職業の下に表示されるようOccupation
によって、このテーブルを旋回するようにしたいです。出力列ヘッダー(実際にはない)は、それぞれDoctor、Professor、Singer、およびActorです。私は、このMySQLのコードを実行するとき
しかし、:
SELECT d.name, p.name, s.name, a.name
FROM (
SELECT @row_number:[email protected]_number+1 AS row_number, Name
FROM OCCUPATIONS, (SELECT @row_number:=0) AS t
WHERE Occupation = 'Professor'
ORDER BY Name
) p
LEFT JOIN (
SELECT @row_number:[email protected]_number+1 AS row_number, Name
FROM OCCUPATIONS, (SELECT @row_number:=0) AS t
WHERE Occupation = 'Doctor'
ORDER BY Name
) d ON d.row_number =p.row_number
LEFT JOIN (
SELECT @row_number:[email protected]_number+1 AS row_number, Name
FROM OCCUPATIONS, (SELECT @row_number:=0) AS t
WHERE Occupation = 'Singer'
ORDER BY Name
) s ON p.row_number =s.row_number
LEFT JOIN (
SELECT @row_number:[email protected]_number+1 AS row_number, Name
FROM OCCUPATIONS, (SELECT @row_number:=0) AS t
WHERE Occupation = 'Actor'
ORDER BY Name
) a ON p.row_number =a.row_number
を予想通りLEFT JOIN
sが動作しませんし、私が取得:
NULL Ashley NULL NULL
NULL Belvet NULL NULL
NULL Britney NULL NULL
NULL Maria NULL NULL
NULL Meera NULL NULL
NULL Naomi NULL NULL
NULL Priyanka NULL NULL
は、これは私には意味がありません - なぜジョインは非常に多くのヌルを生成するのですか? MySQLは、複数のテーブルに番号を付けることができないように動作しますか?私には分かりません。
これはセッション変数の問題のようです。各列の項目に番号を付けることも要件ですか? –
同一の変数を同じクエリで複数回使用する場合は注意が必要です(基本的にはできないので、毎回新しい変数を初期化します)。とにかく、問題への解決策として、ここではヒントがあります:max(場合は... 'doctor' then ... end)doctor – Strawberry