#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. Пожалуйста, объясните, почему вы считаете, что это лучше, чем исходный запрос. Я нахожу оригинал более читабельным и не вижу никаких преимуществ в использовании вашего.