Tim*_*tle 23 mysql sql aggregate-functions
当使用SQL MIN()函数和GROUP BY时,任何其他列(不是MIN列,或GROUP BY列之一)是否匹配匹配MIN行中的数据?
例如,给定一个包含部门名称,员工姓名和薪水的表格:
SELECT MIN(e.salary), e.* FROM employee e GROUP BY department
Run Code Online (Sandbox Code Playgroud)
显然,我会得到两个好的专栏,最低薪水和部门.员工姓名(以及任何其他员工字段)是否来自同一行?即MIN(薪水)行?
我知道很可能有两名员工的工资相同(和最低),但我(现在)所关心的只是获得(或单一)最便宜员工的所有信息.
这会选择最便宜的推销员吗?
SELECT min(salary), e.* FROM employee e WHERE department = 'sales'
Run Code Online (Sandbox Code Playgroud)
基本上,我可以确定与MIN()函数一起返回的数据是否与具有该最小值的(或单个)记录匹配?
如果数据库很重要,我正在使用MySql.
Tom*_*m H 22
如果你想在每个部门找到"最便宜"的员工,你会有两个选择:
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
Run Code Online (Sandbox Code Playgroud)
或者您可以使用:
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
Run Code Online (Sandbox Code Playgroud)
第二个声明有效地说,向我展示你在同一个部门找不到另一个薪水较低的员工的所有员工.
在这两种情况下,如果两个或更多员工的工资相等,那么他们(两者都是)都可以获得相同的工资.
归档时间: |
|
查看次数: |
19396 次 |
最近记录: |