我有一个名为 cia 的表,有两列:
第1列('名称')包含世界上所有国家/地区的名称。 第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'的最低值
中国|列'区'的最高值
答案 0 :(得分:5)
这是最小尺寸:
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 :(得分:1)
编辑: 对不起,我的第一个想法是错的。但这很有效。
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
答案 2 :(得分: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
)
按地区desc排序
这样只写两个子查询。其他方式可能与其他DBMS出错(不使用GROUP BY来显示Name)
答案 3 :(得分: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;