选择列表中的COLUMN无效,因为它不包含在聚合函数或GROUP BY子句中

时间:2019-06-19 08:21:32

标签: mysql sql sql-server

我在具有相同架构和数据的MYSQL和MSSQL(SQL服务器)数据库中有一个名为- tbl_emp_info 的表。

我正在对此数据执行以下查询-

MYSQL查询

 select count(*), name from tbl_emp_info group by dept;

MSSQL查询

 select count(*), name from tbl_emp_info group by dept;

当我执行MYSQL查询时,它将运行并给我结果。 但是当我执行MSSQL查询时,会出现此错误

  

SQL错误(8120):列“ NAME”在   选择列表,因为它既不包含在任何聚合中   函数或GROUP BY子句。

现在,我理解了错误,并且已经检查了它的引用-请检查一下:REF

此外,在MYSQL中-当它通过DEPT进行“分组依据”时,它将在输出中提供NAME的第一个值,并忽略NAME的其余值。

我还需要使用MSSQL获取相同的结果。请赐教。

7 个答案:

答案 0 :(得分:2)

name列也应归为: 从tbl_emp_info组中按部门,名称选择count(*),名称;

所有未汇总的内容,您尝试显示的列必须分组。

答案 1 :(得分:2)

MySQL涉及group by时具有configurable behaviour,因此默认情况下它将接受不符合SQL-92标准的查询。 MS SQL没有。

您的查询没有意义-“按部门分组”表示您希望获取每个部门的员工人数。 MySQL只是给您每个部门的任意名称,以及数量。我想这实际上不是您想要的。

如果要按部门分组,则查询应为:

select count(*), dept from tbl_emp_info group by dept;

如果您想要部门和(按字母顺序)第一位员工,应该是:

select count(*), min(name), dept from tbl_emp_info group by dept;

答案 2 :(得分:1)

在sql中执行汇总时需要选择列 您应该如下所示

select count(*), name,dept from tbl_emp_info group by dept,name;

答案 3 :(得分:1)

尝试: 选择名称,从名称tbl_emp_info组中选择count(1); 要么 从tbl_emp_info组中按部门选择部门,计数(1);

答案 4 :(得分:1)

“分组依据”子句根据使用的字段整理统计信息。在MSSQL中,必须在分组字段中的每个值旁边查看统计信息。在这里,“从tbl_emp_info组按部门选择部门,计数(*)”。是正确的查询

答案 5 :(得分:1)

我不确定您要从查询中得到什么,但是我猜您想要每个部门中的名称列表以及部门中这些名称的数量。 如果是这样,请尝试以下操作:使用COUNT OVER窗口函数

select  NumOfNames = count(name)OVER(partition by dept)
       ,name 
from tbl_emp_info 
;

答案 6 :(得分:1)

@Ankush Rathi您只能获得在group by中为MSSQL选择使用的列。