当使用SQL MIN()函数以及GROUP BY时,是否有任何其他列(不是MIN列或GROUP BY列之一)与匹配的MIN行中的数据匹配?
例如,给定一个包含部门名称,员工名称和薪水的表:
SELECT MIN(e.salary), e.* FROM employee e GROUP BY department
显然,我会得到两个不错的专栏,最低工资和部门。员工名称(和其他任何员工字段)是否来自同一行?即带有MIN(salary)的行?
我知道有可能很可能是两个员工具有相同(最低)的薪水,但我很担心(现在)是让所有的(或信息 单 )最廉价的员工。
这会选择最便宜的推销员吗?
SELECT min(salary), e.* FROM employee e WHERE department = 'sales'
本质上,我可以确定与MIN()函数一起返回的数据将与具有该最小值的(或 单个 )记录匹配吗?
如果数据库很重要,那么我正在使用MySql。
如果您想获得每个部门中最“便宜”的员工,那么您将有两种选择:
SELECT E.* -- Don't actually use *, list out all of your columns FROM Employees E INNER JOIN ( SELECT department, MIN(salary) AS min_salary FROM Employees GROUP BY department ) AS SQ ON SQ.department = E.department AND SQ.min_salary = E.salary
或者您可以使用:
SELECT E.* FROM Employees E1 LEFT OUTER JOIN Employees E2 ON E2.department = E1.department AND E2.salary < E1.salary WHERE E2.employee_id IS NULL -- You can use any NOT NULL column here
第二个声明的工作原理是有效地告诉我,向所有雇员展示您在同一部门找不到其他较低薪水的雇员。
在这两种情况下,如果两个或两个以上雇员的工资相等,并且最低,您将同时获得这两个雇员(全部)。