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
- 卡门
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]