Количество вхождений объединенного столбца в строке - PullRequest
0 голосов
/ 16 января 2019

У меня есть таблица с курсами.

create table Courses
(
  CourseId INTEGER
    primary key
  ...
);

Через таблицу связывания M2M ...

create table User_Course_Links
(
  UserId INTEGER not null
    references Users,
  CourseId INTEGER not null
    references Courses,
  unique (UserId, CourseId)
);

... Я подключил его к таблице, содержащей пользователей.

create table Users
(
  UserId INTEGER
    primary key
  ...
);

Теперь я хочу перечислить все курсы и сколько пользователей подключено к каждому. Как я могу это сделать?

+----------+-----------+
| CourseId | UserCount |
+----------+-----------+
| Course 1 |        20 |
| Course 2 |         5 |
| Course 3 |        12 |
| ...      |       ... |

1 Ответ

0 голосов
/ 16 января 2019

Хорошо, я нашел это.Можно использовать следующий запрос:

SELECT Courses.CourseId, Count(Users.UserId) AS UserCount FROM Users
INNER JOIN User_Course_Links UCL on Users.UserId = UCL.UserId
INNER JOIN Courses Courses on UCL.CourseId = Courses.CourseId
GROUP BY Courses.CourseId

Что приводит к

+----------+-----------+
| CourseId | UserCount |
+----------+-----------+
| Course 1 |        20 |
| Course 2 |         5 |
| Course 3 |        12 |
| ...      |       ... |

В качестве альтернативы можно использовать этот запрос:

SELECT Courses.CourseId, Count(Users.UserId) AS UserCount FROM Courses
LEFT OUTER JOIN User_Course_Links UCL on Courses.CourseId = UCL.CourseId
LEFT OUTER JOIN Users on UCL.UserId = Users.UserId
GROUP BY Courses.CourseId

Чтобы также включить курсыс нулевыми пользователями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...