SSMS 与 MySql 工作台中的 GROUP BY

Posted

技术标签:

【中文标题】SSMS 与 MySql 工作台中的 GROUP BY【英文标题】:GROUP BY in SSMS vs MySql workbench 【发布时间】:2021-07-19 05:52:45 【问题描述】:

问题:编写一个获取两列的查询。第一列必须包含高于 80,000 美元的年薪。第二列重命名为“emps_with_same_salary”,必须显示与该薪水签约的员工人数。最后,按第一列对输出进行排序。需要在 SSMS 中输出。

索尔:

请注意,下面的这个解决方案在 mysql Workbench 中提供了输出,但在 SSMS 中没有。

选择薪水,计数(emp_no)为emps_with_same_salary 从工资 工资 > '80000' 按emp_no分组;

输出:

工资emps_with_same_salary

'80001' , '7'

'80007' , '11'

'80056' , '5'

【问题讨论】:

不知何故我怀疑您的查询在任何数据库引擎中都能正常工作。计数应该是具有特定薪水的员工人数(例如,80001),按 emp_no 分组没有逻辑意义,因为结果集中的计数应该是 1(如果我们假设您的表每个 emp_no 有一行)每个排。如果您在该列上分组,您将获得每个 emp_no 唯一值的一行。你应该按薪水分组。最后,您的结果集没有定义的顺序,因为它没有 order by 子句。不要根据观察假设。 【参考方案1】:

这是您应该在 SQL Server 中使用的查询。它可能也适用于 MySQL,但我不知道特定的 SQL 方言。

select salary, count(emp_no) as emps_with_same_salary
from dbo.salaries 
where salary > 80000 
group by salary
order by salary;

请注意,我删除了 WHERE 子句中常​​量周围的单引号。您不(也不应该)将数字常量括在单引号中。这向读者暗示您的列通常不是字符串。如果您的专栏是 varchar(或类似的),那么您需要解决一组非常不同的问题(因为薪水为 '9' > '80000')。另请注意使用模式限定的表名 - 最佳实践。

【讨论】:

感谢您的快速回复。问题在于,它给出了输出但没有达到预期。如果您看到我在问题中显示的输出(如下所示)。我期待这个输出)。当我运行您提供的查询时,它为 count(emp_no) 提供 1。输出:工资 emps_with_same_salary '80001' , '7' '80007' , '11' '80056' , '5' "not desired" 不是一个有用的评论——尤其是当您证明没有样本数据时。 fiddle 表明我对您的目标的理解。

以上是关于SSMS 与 MySql 工作台中的 GROUP BY的主要内容,如果未能解决你的问题,请参考以下文章

与 group by 一起使用的 sql.xml 中的查询是不是正确?

将 SSMS .rpt 文件加载到 MySQL

GROUP_CONCAT 中的双重结果与 MySQL 中的双重 JOIN

mysql中的group_concat与“case when”条件

与 SSMS 相比,实体框架中的查询时间极慢

MySQL group_concat 与 where 子句