编写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的子句。
答案 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;