Sql 尝试在查询的where部分使用count列

Sql 尝试在查询的where部分使用count列,sql,sql-server,ssms-2014,Sql,Sql Server,Ssms 2014,有两张桌子叫 学生 斯图德 卡米德FK 校园 卡密德PK 卡门 我正在努力寻找超过4名学生的校园,包括camName、camID(学生人数) 这就是我目前得到的 SELECT students.camID, campus.camName, SUM(students.stuID) as [count] FROM students JOIN campus ON campus.camID = students.camID WHERE [count]

有两张桌子叫

学生

  • 斯图德
  • 卡米德FK
校园

  • 卡密德PK
  • 卡门
我正在努力寻找超过4名学生的校园,包括camName、camID(学生人数)

这就是我目前得到的

SELECT 
    students.camID, campus.camName, SUM(students.stuID) as [count] 
FROM 
    students 
JOIN 
    campus ON campus.camID = students.camID 
WHERE 
    [count] > 3 
GROUP BY 
    students.camID, campus.camName
ORDER BY 
    [count]

不过,所有这些让我明白的是一个“无效的ComColumn name”计数的错误。

您不能在
WHERE
子句中使用列别名,因为
WHERE
子句是在创建别名之前计算的。您也不能在
HAVING
子句中使用别名

SELECT students.camID, campus.camName, COUNT(students.stuID) as studentCount
FROM students
JOIN campus
    ON campus.camID = students.camID
GROUP BY students.camID, campus.camName
HAVING COUNT(students.stuID) > 3
ORDER BY studentCount

不能在
WHERE
子句中使用列别名,因为
WHERE
子句是在创建别名之前计算的。您也不能在
HAVING
子句中使用别名

SELECT students.camID, campus.camName, COUNT(students.stuID) as studentCount
FROM students
JOIN campus
    ON campus.camID = students.camID
GROUP BY students.camID, campus.camName
HAVING COUNT(students.stuID) > 3
ORDER BY studentCount

最早的SQL产品不支持派生表,因此发明了
HAVING
。但是现在我们已经有了派生表,所以我们不再需要
拥有
,这确实会引起混乱(注意,传统功能从未从SQL标准中删除):


最早的SQL产品不支持派生表,因此发明了
HAVING
。但是现在我们已经有了派生表,所以我们不再需要
拥有
,这确实会引起混乱(注意,传统功能从未从SQL标准中删除):


它不应该在having子句中,而不是where子句中吗?@ZLK这有助于阅读问题。让我们看看这是否会被否决。我的意思是它应该是
groupby students.camID,campus.camName的SUM(students.stuID)>3
,而不是where子句中的聚合。是的!第二个可行,但我必须使用
SUM(students.stuID)
来防止列名无效。谢谢lot@onedaywhen我不知道这个问题的答案,答案是RDMBS特有的。我自己也很好奇,所以最近我也很好奇。它不应该出现在having子句中,而不是where子句中吗?@ZLK阅读这个问题很有帮助。让我们看看这是否会被否决。我的意思是它应该是
groupby students.camID,campus.camName的SUM(students.stuID)>3
,而不是where子句中的聚合。是的!第二个可行,但我必须使用
SUM(students.stuID)
来防止列名无效。谢谢lot@onedaywhen我不知道这个问题的答案,答案是RDMBS特有的。我自己也很好奇,所以最近我很好奇。
SELECT * 
  FROM (
        SELECT students.camID, campus.camName,
               SUM(students.stuID) as [count]
          FROM students 
               JOIN campus ON campus.camID = students.camID 
         GROUP 
            BY students.camID, campus.camName
       ) AS DT1
 WHERE [count] > 3
 ORDER
    BY [count]