在 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 来显示名称)
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;
我有一个名为 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 来显示名称)
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;