Как написать подзапрос в операторе выбора в улье с дополнительным столбцом, одно единственное значение которого получается суммой определенных строк - PullRequest
2 голосов
/ 11 июня 2019

Предположим, что есть таблица со столбцами, в которых указаны детали успеваемости ученика.

Student(name,subject,marks,verdict('pass'/'fail')).

Мне нужна еще одна колонка в этой таблице, которая будет - сумма баллов по предметам, по которым конкретный студент терпит неудачу.

В MySQL я мог бы написать:

select *,
select (sum(marks) from Student where name=s.name and verdict='fail')
from Student s;

Но это не работает в улье.

ОШИБКА: неподдерживаемое выражение подзапроса Неверный подзапрос. Подзапрос в SELECT может быть только выражением верхнего уровня.

Что можно сделать?

Ответы [ 2 ]

2 голосов
/ 11 июня 2019

вы можете попробовать использовать левое соединение в подзапросе

  select s.*, t.marks
  from Student s
  left join  (
    select (name ,sum(marks) marks
    from Student 
    where verdict='fail'
    group by name)
  ) t on t.name = s.name 

в конце концов попробуйте добавить правильный индекс для имени столбца таблицы ученика

0 голосов
/ 11 июня 2019
select 
    `name`, 
    `verdict`,
    concat_ws('|', collect_set(`subject`)),
    sum(`marks`)
from Student
group by name,verdict
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...