SQL Server中的聚合函数

时间:2012-03-04 13:18:05

标签: sql sql-server

我对SQL Server感到非常沮丧。我只是想加入3个表,非常简单,并且很容易在mysql中完成。但在SQL Server中,它一直告诉我在聚合函数中包含tbl_department.deptname。但是我可以在一个简单的字符串中使用哪些聚合函数?

SELECT      
    COUNT(tblStudent_Department.student_id) AS Expr2, 
    tbl_department.deptname AS Expr1
FROM          
    tblStudent_Department 
LEFT OUTER JOIN
    tbl_department ON tblStudent_Department.deptcode = tbl_department.deptcode 
LEFT OUTER JOIN
    tblStudent ON tblStudent_Department.student_id = tblStudent.studentid
GROUP BY 
    tblStudent_Department.deptcode

请帮忙。

4 个答案:

答案 0 :(得分:7)

数据库不知道如果您对deptcode进行分组,则会在deptname上隐式分组。您必须通过将列添加到group by

来告诉SQL Server
GROUP BY tblStudent_Department.deptcode, tbl_department.deptname

MySQL的特殊之处在于,如果你没有指定聚合,它基本上会选择一个随机行。这可能会产生误导并导致错误的结果。与许多其他事情一样,MySQL有更实用的解决方案,而SQL Server则更正确。

答案 1 :(得分:1)

问题是因为您的GROUP BYSELECT条款不匹配。

解决此问题的最简单方法是将tbl_department.deptname添加到GROUP BY中,如下所示:

GROUP BY tblStudent_Department.deptcode, tbl_department.deptname

答案 2 :(得分:1)

你是按照deptcode分组但是选择了deptname - 如果你不想聚合部门(这听起来很合理)那么你需要在“group by”语句中使用deptname:

SELECT COUNT(tblStudent_Department.student_id) AS Expr2, tbl_department.deptname AS Expr1
FROM tblStudent_Department 
  LEFT OUTER JOIN tbl_department ON tblStudent_Department.deptcode = tbl_department.deptcode 
  LEFT OUTER JOIN tblStudent ON tblStudent_Department.student_id = tblStudent.studentid
GROUP BY tblStudent_Department.deptname 

注意我删除了deptcode,因为我觉得你不需要它

如果您正在使用聚合函数(求和,计数等),则select语句中返回的所有字段都需要聚合或在group by子句中。

答案 3 :(得分:0)

首先,最后,或者将其放入群组中。

规则是:

  • 如果您使用分组依据,则每个字段都是分组字段之一或聚合字段之一。

如果您选择tbl_department.deptname,那么您也必须按此分组,或者说要采取WHICH ONE。

一些聚合函数伪造得很好 - 第一,最后(第一次或最后一次发生)。