Je veux trouver la valeur max dans une colonne 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 Résultat attendu: p> J'ai besoin de résultat identique au-dessus de la mention ci-dessus 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>
select Max(Tot_Val), CName
from table1
where PName in ('P1', 'P2')
group by CName
3 Réponses :
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;
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 code> CNAME code>. P>
rang_number code> li>
ol> xxx pré>
- en utilisant
croix s'appliquer code> li>
ol> xxx pré> 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
. p> p>
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
);