在 MySQL 中显示 MIN() 和 MAX() 值

DISPLAY MIN() and MAX() Values in MySQL

我有一个名为 cia 的 table,有 2 列:

第 1 列('Name')是世界上所有国家的名称。 第 2 列 ('area') 包含这些国家/地区的大小,单位为 m^2。

我想找到最大和最小的国家。要找到那些我需要输入以下查询:

SELECT Name, MAX(area) FROM cia

我的其他查询:

SELECT Name, MIN(area) FROM cia

现在显然我可以做到

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

但是,那时我不会得到与我的值对应的名称。是否有可能得到这样的输出

国家 | Fläche

阿富汗 |列的最低值 'area'

中国 |列的最大值 'area'

这是最小尺寸:

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;

编辑: 抱歉,我的第一个想法是错误的。但这有效。

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

您可以试试这个查询:

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
  )

按地区排序

这样只写两个子查询。其他方法可能会与其他 DBMS 出错(不使用 GROUP BY 来显示名称)

转到Sql Fiddle

table明明要打两下,但没必要打三下。

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;