「Supplier」と「Contact」という名前の 2 つのテーブルがあります。
連絡先テーブルのデータは、サプライヤー テーブルのレコードに対応します。
サプライヤーデータ
id | ###名前###|
---|---|
2 | |
連絡先データ |
id
1 | ||
---|---|---|
2 | 1 | |
3 | 1 | ###ミーティング###|
4 | 2 | 米国エネルギー省 |
5 | 2 | ###芯###|
id | ###名前### ###接続する###
1
2 | ファーウェイ | |
---|---|---|
または、次の結果が返されるはずです | ||
1 | ###馬力###
###ミーティング###
ファーウェイ | 米国エネルギー省 | ###芯###
---|
MySQL
リーリーGROUP_CONCAT
集計関数を使用して、最初の出力テーブルを取得できます。独自のORDER BY
句を使用すると、行の連結順序を確認できます。ウィンドウ関数
リーリーROW_NUMBER
を使用して、サプライヤーごとにパーティション化して Contact テーブルの各行にランキングを割り当てることができます。次に、IF
ステートメントを使用して連絡先が 3 つの列に分割され、ランキングに使用できる 3 つの値がチェックされます。MAX
集計関数を使用すると、NULL 値を削除できます。2 番目のクエリは、サプライヤーごとに顧客が 3 人を超える場合には機能しない可能性があります。この場合、可能な最大数のサプライヤーを含めるようにクエリを変更するか、準備されたステートメントを使用できます。本当にそのような解決策が必要な場合は、以下にコメントを残してください。
より深く理解するには、ここでこれらのソリューションを使用できます。最初のソリューションは任意の MySQL バージョンで動作し、2 番目のソリューションは MySQL 8 で動作します。