web-dev-qa-db-fra.com

Rechercher la valeur maximale et afficher la valeur correspondante dans différents champs du serveur SQL

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?

22
HDunn

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 )

34
Taryn