выбор строк на основе количества из другой таблицы

#sql #postgresql

Вопрос:

У меня есть meetings стол, и attendees стол.

Я хочу найти собрания, где meetings.max_size либо равно нулю, либо количество участников на этом собрании меньше, чем meetings.max_size

Я пробовал что-то подобное, но мне интересно, есть ли лучший способ

 SELECT *
FROM meetings m
WHERE m.max_size is null 
OR (SELECT COUNT(*) from meeting_attendees ma where ma.meeting_id = m.id) < m.max_size
 

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

1. По — моему, все в порядке. Есть и другие способы, но я сомневаюсь, что они будут «лучше».

Ответ №1:

Вы можете попробовать следующее —

 with cte as
(
select meeting_id,m.max_size,count(attandees_id) no_of_attendees
from meetings m join meeting_attendees ma on ma.meeting_id = m.id
group by meeting_id,m.max_size
)

select * from cte 
where max_size is null or no_of_attendees<max_size 
 

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

1. Пожалуйста, объясните, почему вы считаете, что это лучше, чем исходный запрос. Я нахожу оригинал более читабельным и не вижу никаких преимуществ в использовании вашего.