在Sql Server中,如何识别结果列,以便在where子句中使用它

时间:2012-06-08 02:37:57

标签: sql sql-server tsql

这是问题所在。

select count(studentID) AS count from educators where count  > 1 group by studentid  

无法正常运行,因为SQL Server还不知道count列。

所以我必须这样做

select *
  from (select count(StudentID) as count
          from educators
         group by studentid
       ) s
 where s.count > 1

有更优雅的解决方案吗?似乎应该有一个更好的方法来做到这一点。

5 个答案:

答案 0 :(得分:5)

您可以使用HAVING子句,可能是这样的:

SELECT StudentID, COUNT(StudentID)
FROM educators
GROUP BY StudentID
HAVING COUNT(StudentID) > 1

查询将显示多次出现的所有StudentID。

答案 1 :(得分:3)

SELECT COUNT(studentID) AS count 
FROM educators 
GROUP by studentid 
HAVING COUNT(studentID) > 1

HAVING就像聚合函数的位置。所以它适用于AVG,SUM等。

答案 2 :(得分:1)

SELECT
    COUNT(StudentID)
FROM
   educators
GROUP BY
  studentid
HAVING
  COUNT(StudentID) > 1

了解您不应该使用的工具和剪贴板开发人员。

答案 3 :(得分:1)

你得到的就是它的好处。您可以尝试使用count以外的名称作为别名,但它可能无济于事。列别名名义上仅用于结果集,有时(某些DBMS允许)在ORDER BY子句中使用。

此外,聚合条件属于GROUP BY子句后的HAVING子句:

SELECT COUNT(studentID) AS count
  FROM educators
 GROUP BY studentid
HAVING COUNT(StudentID) > 1

显然,在嵌套的SELECT情况下,您可以在外部查询的WHERE子句中应用条件,但不能在内部查询的WHERE子句中应用。

答案 4 :(得分:0)

SELECT COUNT(studentID)AS计数 来自教育工作者 GROUP BY studentid HUNT COUNT(StudentID)> 1

永远记住,当你使用聚合函数如min(),max(),count(),avg()时,你需要使用having子句。