SQL дает мне курсы, где пользователей внутри меньше 30 - PullRequest
0 голосов
/ 12 сентября 2018

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

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

1) TABLE course
_ID, COURSECODE

2) TABLE course_user:
_ID, ID_COURSE, ID_USER

3) TABLE user:
_ID

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

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

Ответы [ 4 ]

0 голосов
/ 12 сентября 2018

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

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;
0 голосов
/ 12 сентября 2018

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

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

Пожалуйста, избегайте использования бессмысленных или запутанных имен.EG user: _ID, ID_USER, course_user: _ID

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

0 голосов
/ 12 сентября 2018

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

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
0 голосов
/ 12 сентября 2018

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