184 похожих чатов

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

подзапрос, который вернет кол-во строк по определенным условиям. Запрос выполняется, но числа неверные и везде одинаковые.
Что я делаю не так? Достаточно ли понятно я объяснил проблему?
select *,
(select count(*)
from human_region_coverage sq
where sq.pos_start >= pos_start
and sq.pos_end <= pos_end
and sq.dp = 0
and workflow_id = '72a307e0-c7c3-4d4d-a892-0c003d6c8d1f'
) sq
from human_region_coverage
where workflow_id = '72a307e0-c7c3-4d4d-a892-0c003d6c8d1f';

11 ответов

8 просмотров

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

Ivan-Blohin Автор вопроса
Vladimir Goncharov
попробуйте добавить алиас для второй таблицы и исп...

Таблица здесь одна и та же. Попробовал добавить алиас для основного from. Ошибка: Outer query column

Ivan Blohin
Таблица здесь одна и та же. Попробовал добавить ал...

ну собственно вот вам и ответ,судя по всему ваше условие в подзапросе использует колонку из другой таблицы и соответсвенно условие всегда срабатывает одинаково. попробуйте ASOF JOIN

А чем это отличается от group by?

Ivan-Blohin Автор вопроса
Алексей Осипов
А чем это отличается от group by?

Не совсем понял, про что вы. Мне нужно для каждой строки выполнить подзапрос, у которого в условии фигурирует значение из самой строки. В SQL не силен, но надеюсь достаточно точно сформулировал то, что нужно

Ivan Blohin
Не совсем понял, про что вы. Мне нужно для каждой ...

а не проще вывести в отдельный столбец ваш подзапрос и его применить его к строке ?

Ivan Blohin
Не совсем понял, про что вы. Мне нужно для каждой ...

Почему ты не пропишешь select workflowid,count(*) from … where … group by workflow

Ivan-Blohin Автор вопроса
Алексей Осипов
Почему ты не пропишешь select workflowid,count(*) ...

мне нужна колонка, которая будет содержать кол-во строк из подзапроса. Причем тут group by я не очень понимаю

Ivan-Blohin Автор вопроса

обычный подзапрос нельзя параметризировать переменными из текущей строки. Оно так не работает в классическом SQL. Тут нет "функций" как в процедурных языках, готовых залезть грязными руками куда угодно. При вычислении выражений select вам доступны значения только текущей строки. Это больше похоже на функциональные языки программирования. Чтобы в рамках формирования строки выдачи посмотреть на соседей (да хоть бы и на всех - от верха до низа) используется относительная новация в SQL - оконные функции. Там специальным синтаксисом можно сделать необходимые выборки-группировки, чтобы посчитать все что вам нужно, и использовать при вычислении значений в текущей строке.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта