SQL дает мне курсы, где пользователей внутри меньше 30

0

Я ищу решение для получения списка курсов, в которых меньше 30 пользователей. Я везде искал, но я не могу пройти через это. Я не очень практичен с mySQL.

У меня 3 таблицы:

1) TABLE course
_ID, COURSECODE

2) TABLE course_user:
_ID, ID_COURSE, ID_USER

3) TABLE user:
_ID

Как я могу получить только COURSECODE курсов, которые имеют менее 30 пользователей?

Большое спасибо... извините за мой плохой английский.

Теги:
count
group-by

4 ответа

1
Лучший ответ

Вот одна идея:

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

Для дополнительной информации об этом запросе я рекомендую вам взглянуть на:

4

Взгляните на предложение 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
1

Попробуй это:

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;
1

Вы можете использовать:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню