Не могу решить проблему, используя группу по функции - PullRequest
0 голосов
/ 10 июля 2019

Задача: получить список в алфавитном порядке актеров, у которых было не менее 30 главных ролей.

Мой код:

select name, count(ord=1)
from casting
join actor on actorid=actor.id
where ord=1 and count(ord=1) and exists ( select 1 from casting
 where count(movieid)>=30)
group by actorid,name
order by name

Это дает мне ошибку, - недопустимое использование группы по функции.

Ответы [ 3 ]

2 голосов
/ 10 июля 2019

Присоединитесь к таблицам, сгруппируйте их по субъекту и поместите условие в предложение has.

select 
  a.name,
  sum(case c.ord when 1 then 1 else 0 end) starringroles
from actor a inner join casting c
on c.actorid = a.id
group by a.id, a.name
having sum(case c.ord when 1 then 1 else 0 end) >= 30
order by a.name

Выражение sum(case c.ord when 1 then 1 else 0 end) будет подсчитывать количество главных ролей (с ord = 1).

1 голос
/ 10 июля 2019

нельзя использовать агрегацию на where необходимости having

select name, count(*)
from casting
join actor on actorid=actor.id
where ord=1  
and exists ( select 1 from casting
 having count(movieid)>=30)   
 group by actorid,name
 having count(movieid)>=30
 order by name
0 голосов
/ 10 июля 2019
select MAX(name) AS name, count(*) AS roles
from casting
join actor on actorid=actor.id
group by actorid
HAVING COUNT(*)>=30
order by name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...