0
votes

Comment trouver la valeur max dans une colonne de SQL Server 2012

Je veux trouver la valeur max dans une colonne xxx pré>

ci-dessus est ma structure de table. Je veux juste trouver la valeur totale maximale uniquement de la table. Dans ce numéro de quatrième rangée 1 et 2, ont la même valeur dans CNAME code> mais totale val et pname code> a des valeurs différentes. Ce que je m'attend que doit avoir à trouver la valeur max dans ID 1 et 2 P>

Résultat attendu: p> xxx pré>

J'ai besoin de résultat identique au-dessus de la mention ci-dessus

 select Max(Tot_Val), CName 
 from table1  
 where PName in ('P1', 'P2')
 group by CName


0 commentaires

3 Réponses :


1
votes

Une option possible est d'utiliser une sous-requête. Donnez à chaque ligne un numéro dans chaque CName code> commandé par tot_val code>. Ensuite, sélectionnez les lignes avec un numéro de ligne égale à une.

with x as
(
  select mt.ID,
         mt.CName,
         mt.Tot_Val,
         mt.PName,
         row_number() over(partition by mt.CName order by mt.Tot_Val desc) as No
  from MyTable mt
)
select x.*
from x
where x.No = 1;


0 commentaires

1
votes

Vous pouvez rechercher top-n-per-groupe pour ce type de requête.

Il y a deux façons courantes de le faire. La méthode la plus efficace dépend de vos index et de votre distribution de données et si vous avez déjà une autre table avec la liste des valeurs CNAME .

  1. en utilisant rang_number xxx
    1. en utilisant croix s'appliquer xxx

      voir une réponse très détaillée sur dba.se récupération n lignes par grouper , ou ici Obtenez la première ligne de chaque groupe .


0 commentaires

1
votes

croix s'appliquer code> peut être aussi rapide qu'une sous-requête corrélée, mais cela a souvent de très bonnes performances (et mieux que Row_Number () code>:

select t.*
from t
where t.tot_val = (select max(t2.tot_val)
                   from t t2
                   where t2.cname = t.cname
                  );


0 commentaires