ВЫБЕРИТЕ с количеством всех строк связанной таблицы и присоедините эти строки. MySQL

#mysql #sql

Вопрос:

У меня есть 2 таблицы в MySQL:

Таблица А

ID
1
2
3
100

Таблица В

ID логический table_a_id
1 0 1
2 1 1
3 1 1
5300 1 100

Стол.A имеет много таблиц.B.

Поэтому я хочу ВЫБРАТЬ 3 строки из таблицы.A с дополнительным полем, в котором вычисляется количество всех связанных строк B, но ВЫБЕРИТЕ из A только те, которые содержат 100 или более строк в B (ПОРЯДОК по ОГРАНИЧЕНИЮ 3 для total_b_rows), а также все связанные строки в B должны иметь не менее 85% истинного значения в логическом столбце. И количество соединенных строк B должно быть 5.

Результат

ID total_b_rows table_b.id table_b.логическое значение
1 0 1 0
1 1 1 1
1 1 1 1
3 1 100 1

Всего строк: 15

Помогите, пожалуйста!

Ответ №1:

Вы можете использовать функции окна для вычисления пороговых значений, а затем упорядочить и ограничить до 15 строк (это гарантирует, что в таблице a будет ровно 3 идентификатора).:

 select b.*
from (select b.*,
             count(*) over (partition by table_a_id) as cnt,
             avg(boolean) over (partition by table_a_id) as ratio,
             row_number() over (partition by table_a_id order by table_a_id) as seqnum
      from b
     ) b
where cnt > 100 and ratio > 0.85 and seqnum <= 5
order by table_a_id
limit 15
 

Комментарии:

1. Спасибо тебе, парень! Собираемся узнать больше о вложенных запросах и оконных функциях