@twentyz

Как составить запрос без подзапросов?

Помогите пожалуйста составить запрос. С использованием подзапросов проблем нет, а как его составить без подзапросов.?

Есть 2 таблицы - groups (id_group,name_group), users (id_user, id_group > fk groups, user_name).

Нужно выбрать группы с количеством юзеров от 5 до 10. Результат в виде таблицы id_group, name_group, size_group (кол-во юзеров).
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Я не знаком с тонкостями Oracle, но Вы можете попробовать так (SQL HAVING Clause):

select 
	 groups.id_group, 
	 groups.name_group, 
	 count(distinct users.id_user) size_group
from groups
join users on users.id_group = groups.id_group
group by groups.id_group, groups.name_group
having count(distinct users.id_user) between 1 and 5
;


SQL fiddle
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@d-stream
Готовые решения - не подаю, но...
В большинстве случаев интеллекта планировщика запросов хватит на то чтобы варианты с подзапросами, cte или having оказались по сути в плане выполнения идентичными. Поэтому тут на первый план скорее выйдет понятность/эстетичность самого текста запроса.

p.s. ну и заглядывая в будущее: вероятно когда-то критерий "от 5 до 10" может превратится в "от N до M", плюс "для только ... групп и только юзеров с признаками ..." -> запрос превратится в stored procedure с кучкой параметров и там возникнут свои нюансы хинтинга
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы