MySQL - Как выбрать минимальный и максимальный в одном (UNION) запросе - PullRequest
2 голосов
/ 10 ноября 2011

Может кто-нибудь сказать мне, как выбрать минимум И максимум из таблицы, используя ключевые слова 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 ]

3 голосов
/ 10 ноября 2011
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)
3 голосов
/ 10 ноября 2011

Как насчет:

SELECT ename, sal
FROM emp
ORDER BY sal ASC
LIMIT 1
UNION
SELECT ename, sal
FROM emp
ORDER BY sal DESC
LIMIT 1
1 голос
/ 10 ноября 2011

На самом деле не проверял, но эта общая идея должна работать:

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 строк, если имеется более одной строки с (одинаковым) значением MIN или MAX. Он также может вернуть только одну строку, если оба значения MIN и MAX происходят из одной и той же строки (вы можете использовать UNION ALL, чтобы избежать этого).

Кстати, ваш запрос означает: Получить MIN (sal), а затем получить ename из случайной строки (и то же самое для MAX). В MIN и MAX В таких случаях MySQL решил вернуть одну и ту же случайную строку.

Однако в большинстве баз данных, отличных от MySQL, вы даже не можете иметь такой «случайный» запрос - вам потребуется включить ename в GROUP BY.

1 голос
/ 10 ноября 2011

Попробуйте это

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
0 голосов
/ 11 сентября 2018

выберите имя, максимальное (зарплата) от работника, где зарплата не в (выбрать максимальную (зарплату) от работника);

o / p: -amit 65000 Ex o / p: madhu 6500

Ответ: выберите имя, зарплату от работника, где зарплата = (выберите максимальную (зарплату) от работника, где зарплата отсутствует (выберите максимальную (зарплату) от сотрудника));о / п: мадху 6500

0 голосов
/ 11 февраля 2018
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 |
+---------+----------------+
0 голосов
/ 10 ноября 2011

Если вы ищете имя сотрудника с минимальной суммой, тогда ваш запрос:

Укажите имя сотрудника, по которому ее сумма равна минимальной стоимости всех сотрудников:

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

Вы можете объединить этот запрос с другим, чтобы получить максимум.

Хорошо смотри с твоими домашними заданиями оракула. ​​

...