подсчет матчей в sql - PullRequest
       34

подсчет матчей в sql

0 голосов
/ 29 августа 2009

Я хотел бы отследить, сколько опросов было проведено различными отделами на работе. Это довольно легко сделать, используя «Группировать по» и считая количество совпадений.

SELECT     Departments.DepartmentName, count(*) as [survey count]
FROM         Departments INNER JOIN
                  Surveys ON Departments.DepartmentID =  Surveys.DepartmentID
 GROUP BY Departments.DepartmentName

но это показывает только те отделы, которые завершили опросы. Как бы я получал, чтобы отделы, которые не завершили опросы, были представлены в списке результатов как нулевой счет?

Обновление:

SELECT     Departments.DepartmentName AS Department, 
        COUNT( Surveys.DepartmentID) AS      [survey count]
        , Departments.DepartmentID
        FROM          Surveys FULL OUTER JOIN
                  Departments ON  Surveys.DepartmentID = Departments.DepartmentID
   GROUP BY Departments.DepartmentName, Departments.DepartmentID

Ответы [ 5 ]

4 голосов
/ 29 августа 2009

Вам нужно «левое внешнее объединение» вместо «внутреннего соединения» - оно будет производить строки в выходных данных со всеми столбцами, соответствующими «опросам», как ноль, где не было совпадения для условия соединения.

Вам нужно обновить запрос на "count (Surveys.DepartmentID)" или "sum (случай, когда surveyys.departmentID не равен NULL, а затем 1 или 0 End)", чтобы избежать подсчета таких строк в качестве одной отправки.

3 голосов
/ 29 августа 2009

Заменить INNER JOIN на LEFT JOIN. Он выберет все отделы, даже если никакого связанного опроса не существует.

2 голосов
/ 29 августа 2009

Просто измените ВНУТРЕННЕЕ СОЕДИНЕНИЕ на ЛЕВОЕ СОЕДИНЕНИЕ и измените СЧЕТ (), чтобы он ссылался только на ОБЗОРЫ. Это, вероятно, будет работать как есть.

SELECT     Departments.DepartmentName,
           count(Surveys.DepartmentID) as [survey count]
FROM         Departments LEFT JOIN
              Surveys ON Departments.DepartmentID =  Surveys.DepartmentID
 GROUP BY Departments.DepartmentName
1 голос
/ 29 августа 2009
SELECT     Departments.DepartmentName, count(Surveys.*) as [survey count]
FROM       Departments 
LEFT JOIN  Surveys ON Departments.DepartmentID =  Surveys.DepartmentID
GROUP BY   Departments.DepartmentName

Обратите внимание на изменения в ВЛЕВО ПРИСОЕДИНИТЬСЯ и подсчитать ( Опросы . *)

1 голос
/ 29 августа 2009
SELECT Departments.DepartmentName, count(Surveys.DepartmentID) as [survey count]
FROM Departments
LEFT OUTER JOIN Surveys
ON Departments.DepartmentID =  Surveys.DepartmentID
GROUP BY Departments.DepartmentName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...