如何在连接查询中使用count with where子句

时间:2013-11-22 12:57:12

标签: sql

    SELECT
           DEPTMST.DEPTID,
           DEPTMST.DEPTNAME,
           DEPTMST.CREATEDT,
           COUNT(USRMST.UID)             
    FROM DEPTMASTER  DEPTMST    
    INNER JOIN USERMASTER USRMST ON USRMST.DEPTID=DEPTMST.DEPTID    
    WHERE DEPTMST.CUSTID=1000 AND DEPTMST.STATUS='ACT

我尝试了几种组合,但我一直收到错误

  

列'DEPTMASTER.DeptID'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中

我还添加了分组,但它不起作用

3 个答案:

答案 0 :(得分:1)

你错过了小组

 SELECT     DEPTMST.DEPTID,
               DEPTMST.DEPTNAME,
               DEPTMST.CREATEDT,
               COUNT(USRMST.UID)             
        FROM DEPTMASTER  DEPTMST    
        INNER JOIN USERMASTER USRMST ON USRMST.DEPTID=DEPTMST.DEPTID    
        WHERE DEPTMST.CUSTID=1000 AND DEPTMST.STATUS='ACT

    group by DEPTMST.DEPTID,
               DEPTMST.DEPTNAME,
               DEPTMST.CREATEDT

答案 1 :(得分:1)

使用类似的计数,您需要对所选列进行分组,

SELECT
    DEPTMST.DEPTID,
    DEPTMST.DEPTNAME,
    DEPTMST.CREATEDT,
    COUNT(USRMST.UID)             
    FROM DEPTMASTER  DEPTMST    
    INNER JOIN USERMASTER USRMST ON USRMST.DEPTID=DEPTMST.DEPTID    
    WHERE DEPTMST.CUSTID=1000 AND DEPTMST.STATUS='ACT'
GROUP BY DEPTMST.DEPTID,
           DEPTMST.DEPTNAME,
           DEPTMST.CREATEDT

答案 2 :(得分:0)

所有聚合函数(如平均,计数,求和)都需要与按功能分组一起使用。如果您不使用group by子句,则表示您正在对表的所有行执行该函数。

例如

 Select count(*) from table;

这将返回表中所有行的计数。

 Select count(*) from table group by name

这将首先根据名称对表格数据进行分组,然后返回每个组的计数。

因此,在您的情况下,如果您想要USRMST.UID的计数,请将其分组到选择列表中的所有其他列。