1

这是问题所在。

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

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

4

5 回答 5

5

您可以使用该HAVING子句,也许是这样的:

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

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

于 2012-06-08T02:45:16.840 回答
3
SELECT COUNT(studentID) AS count 
FROM educators 
GROUP by studentid 
HAVING COUNT(studentID) > 1

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

于 2012-06-08T02:41:31.360 回答
1
SELECT
    COUNT(StudentID)
FROM
   educators
GROUP BY
  studentid
HAVING
  COUNT(StudentID) > 1

学习你的工具和你不应该成为的剪贴板开发者。

于 2012-06-08T02:42:03.460 回答
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 子句中应用条件。

于 2012-06-08T02:43:30.300 回答
0

SELECT COUNT(studentID) AS count FROM 教育工作者 GROUP BY studentid HAVING COUNT(StudentID) > 1

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

于 2012-06-08T11:05:23.930 回答