代码之家  ›  专栏  ›  技术社区  ›  Brad

在sql中计数匹配项

sql
  •  0
  • Brad  · 技术社区  · 17 年前

    通过使用“分组方式”并计算匹配次数,这很容易做到。

    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 回复  |  直到 17 年前
        1
  •  2
  •   RBarryYoung    17 年前

    您需要一个“左外连接”而不是“内连接”,这将在输出中产生行,其中与“调查”对应的所有列都为空,而没有与连接条件匹配的列。

    您需要将查询更新为“count(Survey.DepartmentID)”或“sum(当Survey.Department ID不为空时为1,否则为0)”,以避免将此类行计为一次提交。

        2
  •  4
  •   araqnid    17 年前

    只需将您的INNER JOIN更改为LEFT JOIN,并将COUNT()更改为仅引用SURVEYS。到那时,这可能会奏效。

    SELECT     Departments.DepartmentName,
               count(Surveys.DepartmentID) as [survey count]
    FROM         Departments LEFT JOIN
                  Surveys ON Departments.DepartmentID =  Surveys.DepartmentID
     GROUP BY Departments.DepartmentName
    
        3
  •  3
  •   pingw33n    17 年前

    替换 INNER JOIN 随着 LEFT JOIN

        4
  •  1
  •   Jim G.    17 年前
    SELECT Departments.DepartmentName, count(Surveys.DepartmentID) as [survey count]
    FROM Departments
    LEFT OUTER JOIN Surveys
    ON Departments.DepartmentID =  Surveys.DepartmentID
    GROUP BY Departments.DepartmentName
    
        5
  •  1
  •   Philip Fourie    14 年前
    SELECT     Departments.DepartmentName, count(Surveys.*) as [survey count]
    FROM       Departments 
    LEFT JOIN  Surveys ON Departments.DepartmentID =  Surveys.DepartmentID
    GROUP BY   Departments.DepartmentName
    

    左 加入并计数( 调查 .*)