我在具有相同架构和数据的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获取相同的结果。请赐教。
答案 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选择使用的列。