Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Trouver la valeur maximale et afficher la valeur correspondante à partir d'un champ différent dans le serveur SQL

Il existe plusieurs façons de procéder :

Un filtre dans le WHERE clause :

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 ne peut y avoir aucun lien, 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 avec démo de tous.

En remarque sur la fonction de classement, vous pouvez 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 la démo)