SQL:此处不允许使用组函数

SQL:此处不允许使用组函数,sql,oracle11g,Sql,Oracle11g,我有这个疑问 SELECT * FROM TABLEA A INNER JOIN TABLEB B ON A.ID = B.ID AND COUNT(B.*) < 4 WHERE A.STATUS = 0 在表A中,ID将有2行data2条目,但在表B中,同一ID最多有4行数据。我试图获取表B中数据行数少于4行的ID并显示结果 因此,如果ID12345在表B中只有2行数据,则显示该结果。如果ID98765在表B中有4行数据,则忽略此条目 但是当我尝试上面的查询时,它说这里不允许使用组函数

我有这个疑问

SELECT * FROM TABLEA A
INNER JOIN TABLEB B ON A.ID = B.ID AND COUNT(B.*) < 4
WHERE A.STATUS = 0
在表A中,ID将有2行data2条目,但在表B中,同一ID最多有4行数据。我试图获取表B中数据行数少于4行的ID并显示结果

因此,如果ID12345在表B中只有2行数据,则显示该结果。如果ID98765在表B中有4行数据,则忽略此条目

但是当我尝试上面的查询时,它说这里不允许使用组函数。请找人帮忙。

如果没有goup by或have子句,就不能使用count。在你的情况下,你需要

请参阅

如果没有goup by或have子句,则不能使用count。在你的情况下,你需要


请看

用你想说的方式写出来

我试图获取表B中数据行数少于4行的ID并显示结果

SELECT * FROM TABLEA a
    JOIN TABLEB b ON b.ID = a.ID 
WHERE A.STATUS = 0
   and (Select count(*) from TABLEB 
       where id = a.Id) < 4
不清楚,但如果您也只需要表A中有2行或更多行的ID:

SELECT * FROM TABLEA a
   JOIN TABLEB b ON b.ID = a.ID 
WHERE A.STATUS = 0
   and (Select count(*) from TABLEB 
       where id = a.Id) < 4
   and (Select count(*) from TABLEA 
        where id = a.Id) > 1

用你想说的方式来写

我试图获取表B中数据行数少于4行的ID并显示结果

SELECT * FROM TABLEA a
    JOIN TABLEB b ON b.ID = a.ID 
WHERE A.STATUS = 0
   and (Select count(*) from TABLEB 
       where id = a.Id) < 4
不清楚,但如果您也只需要表A中有2行或更多行的ID:

SELECT * FROM TABLEA a
   JOIN TABLEB b ON b.ID = a.ID 
WHERE A.STATUS = 0
   and (Select count(*) from TABLEB 
       where id = a.Id) < 4
   and (Select count(*) from TABLEA 
        where id = a.Id) > 1

加入子查询``从表a中选择*内部加入选择B.ID,CountB.ID作为表B组中的计数,由B.ID C按a.ID=C.ID和计数<4进行计算,其中a.STATUS=0``@SujeshArukil谢谢:加入子查询``从表a中选择*内部加入选择B.ID,CountB.Id作为表B组中的计数,由A.Id=C.Id上的B.Id C和计数<4,其中A.STATUS=0``@SujeshArukil谢谢:哈哈!您声明在没有分组依据的情况下无法使用计数。然后通过这样做的方式展示一个不正确的解决方案!您可以在不使用group by的情况下使用聚合函数,只要它们将对查询返回的整个数据集进行操作,并且select子句中没有非聚合表达式。您的回答失败,因为select*包含两个表中的所有属性。哈哈!您声明在没有分组依据的情况下无法使用计数。然后通过这样做的方式展示一个不正确的解决方案!您可以在不使用group by的情况下使用聚合函数,只要它们将对查询返回的整个数据集进行操作,并且select子句中没有非聚合表达式。您的回答失败,因为select*包含两个表中的所有属性。