J'ai un tableau avec des données sur les villes qui comprend leur nom, leur population et d'autres domaines non pertinents pour ma question.
ID Name Population
1 A 45667
2 B 123456
3 C 3005
4 D 13769
Pour trouver la population maximale est basique, mais j'ai besoin d'une table résultante qui a la population maximale dans une colonne et le nom de la ville correspondante dans une autre colonne
Population Name
123456 B
J'ai parcouru similaire questions, mais pour une raison quelconque, les réponses semblent trop compliquées. Existe-t-il un moyen d'écrire la requête sur 1 ou 2 lignes?
Il existe plusieurs façons de procéder:
Un filtre dans la clause WHERE
:
select id, name, population
from yourtable
where population in (select max(population)
from yourtable)
Ou une sous-requête:
select id, name, population
from yourtable t1
inner join
(
select max(population) MaxPop
from yourtable
) t2
on t1.population = t2.maxpop;
Ou vous pouvez utiliser TOP WITH TIES
. S'il n'y a pas de liens, vous pouvez supprimer le with ties
. Cela inclura toutes les lignes qui ont la même valeur de population:
select top 1 with ties id, name, population
from yourtable
order by population desc
Puisque vous utilisez SQL Server, vous pouvez également utiliser des fonctions de classement pour obtenir le résultat:
select id, name, population
from
(
select id, name, population,
row_number() over(order by population desc) rn
from yourtable
) src
where rn = 1
Voir SQL Fiddle with Demo de tous.
En guise de remarque sur la fonction de classement, vous souhaiterez peut-être utiliser dense_rank()
au lieu de row_number()
. Ensuite, si vous avez plus d'une ville avec la même population, vous obtiendrez les deux noms de ville. (Voir Démo )