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

Sql 如何在联接查询中使用count with where子句,sql,Sql,我试过几种组合,但总是出错 列“DEPTMASTER.DeptID”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中 我还添加了分组依据,但它不起作用您错过了分组依据 SELECT DEPTMST.DEPTID, DEPTMST.DEPTNAME, DEPTMST.CREATEDT, COUNT(USRMST.UID) FROM DEPTMASTER

我试过几种组合,但总是出错

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

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

您错过了分组依据

    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

使用这样的计数时,需要对选定列进行分组


所有聚合函数(如平均、计数、求和)都需要与分组函数一起使用。如果不使用GROUPBY子句,则对表的所有行执行该函数

 Select count(*) from table;
例如

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

 Select count(*) from table;
这将首先根据名称对表数据进行分组,然后返回每个组的计数


因此,在您的情况下,如果需要USRMST.UID的计数,请按选择列表中的所有其他列对其进行分组。

您需要使用
groupby
,后跟所有不在聚合函数中的列名,例如
groupby-DEPTMST.DEPTID,DEPTMST.DEPTNAME…
您的代码末尾是否缺少字符串分隔符?代码运行所需的
GROUP BY
语句中的列数是特定于数据库引擎的-SQLServer需要全部,MySQL需要一个。请将您的RDBMS添加为标记。但是,只要您按照
DEPTMST.DEPTID、DEPTMST.DEPTNAME、DEPTMST.CREATEDT
进行分组,它看起来就会工作。
 Select count(*) from table;
 Select count(*) from table group by name