質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Spark

Spark(Apache Spark)とは、膨大なデータを迅速、柔軟に分散並行処理を行うフレームワークです。分析ツールであるApache Hadoopと比較し、最大で100倍の速度でデータ処理ができるとされています。

Q&A

2回答

1346閲覧

SQLでの1対n結合

bainary

総合スコア58

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Spark

Spark(Apache Spark)とは、膨大なデータを迅速、柔軟に分散並行処理を行うフレームワークです。分析ツールであるApache Hadoopと比較し、最大で100倍の速度でデータ処理ができるとされています。

0グッド

0クリップ

投稿2021/04/28 07:02

下記のようなデータフレームをテーブル3の用に修正を行いたいのですがどうしたら解決できますでしょうか?
ロジックが思いつかずかなり詰まってしまっていて、どなたかご教授お願いします。
テーブル1

Keyvalue
hoge1huga1
hoge1huga2
hoge1huga3
hoga2huga1
hoga2huga1

テーブル2

Keyvalue
hoge1test
hoge2test

テーブル3
|Key|value|test1|test2|test3|
|:--|:--:|
|hoge1|test|huga1|huga2|huga3
|hoge2|test|huga1|huga1|null

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

  • テーブル3のカラムは固定 (例えばtest4が増えたり、test3がなくなったりはしない)
  • test1、test2、test3に入れる順序はなんでもよい

ということであれば以下のようなSQLになると思います。

SQL

1SELECT 2 t2.key AS `key`, 3 MAX(t2.value) AS `value`, 4 MAX(CASE WHEN MOD(rnk, 3) = 0 THEN t1.value END) AS `test1`, 5 MAX(CASE WHEN MOD(rnk, 3) = 1 THEN t1.value END) AS `test2`, 6 MAX(CASE WHEN MOD(rnk, 3) = 2 THEN t1.value END) AS `test3` 7FROM tbl2 t2 8JOIN ( 9 SELECT *, (ROW_NUMBER() OVER (PARTITION BY t1.key))-1 AS rnk 10 FROM tbl1 t1 11) t1 ON t2.key = t1.key 12GROUP BY t2.key

投稿2021/04/28 14:04

neko_the_shadow

総合スコア2230

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

今のままだと順番が確定しないので、そのとおりを実現するには追加条件が必要です
group_concatのように1カラムで処理するほうが楽だと思います
どうしてもカラム分けをしたいならプロシージャで対応するとよいでしょう

投稿2021/04/28 07:14

yambejp

総合スコア114839

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bainary

2021/04/28 07:22

同じくgroup_concatで処理を行った後に、別々でカラムを用意し処理を行おうと思っていました。 その方法が一番最短でしょうか。。?
yambejp

2021/04/28 08:18

group_concatしてあとにカラムを分けるのは意味がありませんので やめたほうがいいでしょう。 group_concatした結果の文字列を利用してプログラムでなんとかしてください 回答にも書きましたがどうしてもカラムをわけて処理したいなら プロシージャです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問