Коррелированные скалярные подзапросы - PullRequest
0 голосов
/ 13 января 2020

Я использую Spark SQL. У меня есть следующая таблица:

Отдел:

dep_id | emp_id | age
0 | 0 | 21
0 | 1 | 53
0 | 3 | 42
0 | 5 | 58
1 | 4 | 36
1 | 8 | 48
2 | 2 | 54
2 | 6 | 31
2 | 7 | 30
2 | 9 | 54

Однако я не могу успешно выполнить следующий запрос в Spark SQL:

SELECT   A.dep_id,
         A.emp_id,
         A.age,
         (SELECT  MAX(age) FROM department B WHERE A.dep_id = B.dep_id) max_age
FROM     department A
ORDER BY 1,2

Может кто-нибудь помочь, пожалуйста, где я могу пойти не так.

Спасибо

Ответы [ 2 ]

1 голос
/ 13 января 2020

Подзапрос не нужен, вы можете сделать это с помощью оконных функций:

SELECT   dep_id,
         emp_id,
         age,
         MAX(age) OVER(PARTITION BY dep_id) max_age
FROM     department 
ORDER BY 1,2
0 голосов
/ 13 января 2020

Вы должны объявить таблицу alias:

SELECT A.dep_id, A.emp_id, A.age,
      (SELECT MAX(b.age) FROM department B WHERE A.dep_id = B.dep_id) max_age
FROM department A;
...