MySQL - 如何在一个(UNION)查询中选择最小和最大值

时间:2011-11-09 21:52:54

标签: mysql select union max min

任何人都可以告诉我如何使用MIN和MAX以及UNION关键字从表格中选择最小值和最大值。

我试图使用:

SELECT ename, MIN(sal)
FROM emp
UNION
SELECT ename, MAX(sal)
FROM emp;

但它只显示MIN的相同名称,如:

smith | 800
smith | 5000

需要:

smith | 800
king  | 5000

example data

7 个答案:

答案 0 :(得分:3)

怎么样:

SELECT ename, sal
FROM emp
ORDER BY sal ASC
LIMIT 1
UNION
SELECT ename, sal
FROM emp
ORDER BY sal DESC
LIMIT 1

答案 1 :(得分:3)

SELECT ename, sal
FROM EMP
WHERE sal = (SELECT MIN(sal) FROM EMP)
UNION
SELECT ename, sal
FROM EMP
WHERE sal = (SELECT MAX(sal) FROM EMP)

答案 2 :(得分:1)

试试这个

select Name as Lowest,amt as salary
from emp 
join (select min(sal) as amt from emp) x on x.amt=emp.sal
union all
select Name ,amt as salary
from emp 
join (select max(sal) as amt from emp) x on x.amt=emp.sal

答案 3 :(得分:1)

实际上没有测试它,但这个一般的想法应该有效:

SELECT ename, sal FROM emp WHERE sal = (SELECT MIN(sal) FROM emp)
UNION
SELECT ename, sal FROM emp WHERE sal = (SELECT MAX(sal) FROM emp)

请注意,如果有多个行具有(相同)MIN或MAX值,则返回的行数可能超过2行。如果MIN和MAX恰好来自同一行,它也可能只返回一行(你可以使用UNION ALL来避免这种情况)。

BTW,您的查询意味着:获取MIN(sal),然后从随机行获取ename(对MAX而言相同)。 In在MIN和MAX情况下,MySQL决定返回相同的随机行。

但是,在MySQL以外的大多数数据库中,你甚至可能没有这种“随机”查询 - 你需要在GROUP BY中加入ename

答案 4 :(得分:0)

如果您正在寻找具有最小值的员工姓名,那么您的查询是:

选择所有员工最少的员工姓名:

Select name, sal from employees where sal = 
   (select min(sal) from employees)

您可以将此查询与另一个查询结合以获得最大值

好好看看你的oracle homeworks。

答案 5 :(得分:0)

select Name, LifeExpectancy from (
(select * from(
SELECT Name, LifeExpectancy FROM country where LifeExpectancy > 0 ORDER BY LifeExpectancy ASC LIMIT 1
)a)
union
(select * from(
SELECT Name, LifeExpectancy FROM country where LifeExpectancy > 0 ORDER BY LifeExpectancy desc LIMIT 1
)b)
)c

结果:

+---------+----------------+
|  Name   | LifeExpectancy |
+---------+----------------+
| Zambia  |           37.2 |
| Andorra |           83.5 |
+---------+----------------+

答案 6 :(得分:-1)

选择姓名,不提供薪水的雇员的最高薪水(选择雇员的最高薪水);

o / p:-允许65000 例如o / p:madhu 6500

答案: 选择姓名,薪水=的员工的薪水=(薪水不在的员工选择最高薪水(员工的薪水选择max(薪水))); o / p:madhu 6500