Я ищу решение для получения списка курсов, в которых меньше 30
пользователей. Я везде искал, но я не могу пройти через это. Я не очень практичен с mySQL.
У меня 3 таблицы:
1) TABLE course
_ID, COURSECODE
2) TABLE course_user:
_ID, ID_COURSE, ID_USER
3) TABLE user:
_ID
Как я могу получить только COURSECODE
курсов, которые имеют менее 30
пользователей?
Большое спасибо... извините за мой плохой английский.
Вот одна идея:
SELECT COURSECODE, COUNT(user:_ID) FROM TABLE1, TABLE3
WHERE
TABLE3.user:_ID = TABLE2.course_user:_ID
AND
TABLE2.ID_COURSE = TABLE1.ID_USER
GROUP BY COURSECODE
HAVING COUNT(TABLE2.ID_USER) < 30
Пожалуйста, избегайте использования бессмысленных или запутывающих имен. user: _ID
EG user: _ID
, ID_USER
, course_user: _ID
Для дополнительной информации об этом запросе я рекомендую вам взглянуть на:
Взгляните на предложение HAVING: http://www.mysqltutorial.org/mysql-having.aspx
Что-то вроде этого:
select Course.COURSECODE, count(course_user.ID_USER) from course
join course_user on course_user .ID_COURSE = course._ID
group by Course.COURSECODE
having count(course_user.ID_USER) < 30
Попробуй это:
SELECT c.COURSECODE, count(u.id) as userCount
FROM course_user cu JOIN course c on (c.id = cu.id_course) JOIN user u on (u.id = cu.id_user)
GROUP BY c.COURSECODE
HAVING userCount < 30;
Вы можете использовать:
SELECT c.COURSECODE
FROM course_user cu
LEFT JOIN course c on (c.id = cu.id_course)
LEFT JOIN user u on (u.id = cu.id_user)
GROUP BY c.COURSECODE
HAVING count(cu.id_user) < 30