在where子句中使用select函数的输出

时间:2013-07-30 23:46:02

标签: sql

编写SQL查询的正确方法是什么,所以我可以使用在Where子句中的Select语句中使用的函数的输出?

数据表:

ID    Count_ID
111   2
111   2
222   3
222   3
222   3
333   1

查询:

Select ID, Count(Table1.ID) As Count_ID
From Table1
Where Count_ID = 3
Group By ID

它为我提供了无效的列名,其中包含Count_ID的子句。

3 个答案:

答案 0 :(得分:3)

您的过滤存在循环依赖关系。您只想选择计数为3的记录,但必须先计算它们才能确定。这意味着您需要一个HAVING子句而不是WHERE子句(要过滤聚合函数,您始终需要一个HAVING子句)。

此外,您不能在WHERE或HAVING子句中为聚合函数使用别名列名。你必须在过滤中重复这个功能:

Select ID, Count(ID) As Count_ID
From Table1
Group By ID
HAVING Count(ID) = 3;

答案 1 :(得分:2)

在这种情况下,因为您引用了聚合函数和分组,所以必须使用HAVING子句。

 Select ID, Count(Table1.ID) As Count_ID
   From Table1
        Group By ID
        Having Count(Table1.ID)  = 3

答案 2 :(得分:1)

或者您也可以使用它:

SELECT ID, Count_ID
FROM
  (SELECT ID, Count(ID) AS Count_ID
   FROM Table1
   GROUP BY ID) Calced
WHERE Calced.Count_ID = 3;

http://sqlfiddle.com/#!4/f2a73/5