2015-02-05 2 views
0

У меня есть таблица под названием CIA с 2-мя колонками:DISPLAY MIN() и MAX() Значения в MySQL

Колонка 1 ('Name') имеет имена всех стран мира. Столбец 2 ('площадь') имеет размеры этих стран в м^2.

Я хочу найти самую большую и маленькую страну. Для того, чтобы найти те, мне нужно ввести следующие запросы:

SELECT Name, MAX(area) FROM cia 

Мой другой запрос:

SELECT Name, MIN(area) FROM cia 

Теперь, очевидно, что я мог сделать

SELECT MIN(area), MAX(area) FROM cia 

однако, я бы не получить соответствующее имя для моих значений. Можно ли получить такой вывод, как это

Страна | Fläche

Афганистан | минимальное значение столбца 'площадь'

Китай | Наибольшее значение столбца 'области'

+1

Переименовать таблицу «cia» в страны, переименовать колонку «имя» в страну! (Имя является слишком общим именем, чтобы быть именем ...) – jarlh

+0

Конечно. Дело в том, что это не моя база данных. Это просто для изучения SQL. – Fang

ответ

4

Это минимальный размер:

select min(area) from cia; 

И этот максимум:

select max(area) from cia; 

Итак:

select * from cia 
where area = (select min(area) from cia) 
    or area = (select max(area) from cia) 
order by area; 
1

EDIT: К сожалению, моя первая мысль была неправильной. Но это работает.

SELECT Typ = 'MaxValue', * FROM (SELECT TOP 1 Name, area FROM cia ORDER BY area DESC) tmp1 
UNION ALL 
SELECT Typ = 'MinValue', * FROM (SELECT TOP 1 Name, area FROM cia ORDER BY area ASC) tmp2 
1

Вы можете попробовать этот запрос:

CREATE TABLE area (name varchar(50), area int); 

insert into area values ('Italy', 1000); 
insert into area values ('China', 10000); 
insert into area values ('San Marino', 10); 
insert into area values ('Ghana', 3333); 

select main.* from area main 
where 
not exists(
    SELECT 'MINIMUM' 
    FROM area a2 
    where a2.area < main.area 
) 
or 
not exists(
    SELECT 'MAXIMUM' 
    FROM area a3 
    WHERE a3.area > main.area 
) 

заказа по площади по убыванию

В этом случае писать только два подзапрос. Другие способы могут пойти по ошибке с другим СУБДОМ (без использования GROUP BY, чтобы показать имя)

Перейти к Sql Fiddle

0

Вы, очевидно, должны ударить по столу два раза, но нет никакой необходимости для трех ударов.

select case Area when MaxArea then 'Largest' else 'Smallest' end Rating, b.Name as Country, b.Area 
from(
    select Max(Area) as MaxArea, Min(Area) as MinArea 
    from Cia a 
) S 
join Cia b 
    on b.Area = s.MaxArea 
    or b.Area = s.MinArea; 
Смежные вопросы