Оператор Having не работает в моем sql

#mysql #sql

#mysql #sql

Вопрос:

Попробуйте написать запрос, подобный этому:

 select distinct S.course_id,count(S.course_id)
from Section As S
Where Exists (Select S.course_id
             From Section 
             Where S.year='2019'
             Having count(S.course_id)>1 )
Group by S.course_id
Order by S.course_id DESC;
 

Но результат подсчитывается, чтобы дать мне course_ids, который появляется не более одного раза.

course_id count(S.course_id)
PHY-101 1
EE-181 1
CMPE-347 1
CMPE-190 2
CMPE-101 1
БИО-101 1

введите описание изображения здесь

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

1. Вероятно, подзапрос должен быть коррелирован .

2. Кстати, вам редко когда нужно делать SELECT DISTINCT при выполнении GROUP BY.

Ответ №1:

попробуйте изменить свой запрос следующим образом

 select s.course_id, count(s.course_id)
from Section as s
Where Exists (Select * From Section s2
             Where s2.year='2019' and s2.course_id=s.course_id
             group by s2.course_id
             Having count(*)>1)
Group by s.course_id
Order by s.course_id DESC;
 

Ответ №2:

Разве подзапрос не является в основном тем, что вы хотите?

 Select S.course_id, count(*)
From Section s
Where S.year = '2019'
Group by S.course_id
Having count(*) > 1;
 

Если вам нужны все предложения, используйте оконные функции:

 select s.*
from (select s.*, count(*) over (partition by s.year) as cnt
      from section s
      where s.year = '2019'
     ) s
where cnt > 1;