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 中的查询是不是正确?
GROUP_CONCAT 中的双重结果与 MySQL 中的双重 JOIN