前提・実現したいこと
SPARK SQL 2.4.4を使用しています。
別起票した質問でご回答いただいた内容を反映してコーディングしたところ、SparkSQLではエラーとなってしまいました。
実現したいこととしては以下の通りです。
重複した値を持つ複数のレコードを一つにまとめて見やすく成型するSQLを考えています。
GROUP BYしたレコードにて判定分を書いているのですが、
複数項目があてはまる場合は優先順位が高いほうを項目として取り出したいと考えています。
例)
★「生徒名簿」上のレコード
生徒ID|学年|年度|クラブID|優先順位|…
0001| 1|2019| 1| 1|…
0001| 1|2019| 2| 2|…
0001| 2|2020| 2| 1|…
★「クラブ名簿」上のレコード
クラブID|クラブ名|…
1| 水泳|…
2| 手芸|…
★「クラブ履歴」
生徒ID|2019_所属クラブ|2020_所属クラブ|…
0001| 水泳| 手芸|…
上記の例では、生徒名簿とクラブ名簿というテーブルを、クラブ履歴というテーブルにまとめてみれるようにしたいのです。
連日こちらの皆様に甘えてしまって恐縮ではございますが、解消方法などご存じの方がいらっしゃいましたらご教示いただけますと幸いです。
発生している問題・エラーメッセージ
Error in SQL statement:AnalysisException Expressions referencing the outer query are not supported outside of WHERE/HAVING clauses: Aggregate[min(outer(優先順位#3638)) AS min(outer())#3694]""
該当のソースコード
select 生徒名簿.生徒ID as 生徒ID MAX(CASE 生徒名簿.年度 WHEN '2019' THEN クラブ名簿.クラブ名 ELSE NULL END) AS 2019_所属クラブ, MAX(CASE 生徒名簿.年度 WHEN '2020' THEN クラブ名簿.クラブ名 ELSE NULL END) AS 2020_所属クラブ FROM 生徒名簿 INNER JOIN クラブ名簿 ON 生徒名簿.クラブID = クラブ名簿.クラブID where 優先順位 = ( select Min(優先順位) from 生徒名簿 where 生徒ID=生徒名簿.生徒ID and 年度=生徒名簿.年度 ) GROUP BY 生徒名簿.生徒ID
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/21 13:26
2020/02/21 14:16
2020/02/26 12:08
2020/02/28 11:35