0
votes

Montrer seulement une ligne par titre dans la requête SQL

J'ai la requête suivante: xxx

qui retourne plusieurs rangées par titre. Je veux seulement le salaire maximum pour chaque titre. xxx

code @zealouse @zealous et ces travaux: xxx


0 commentaires

3 Réponses :


2
votes

Essayez cette fonction de fenêtre dense_rank () code>. S'il y a une cravate dans le salaire, il retournera les deux enregistrements avec Max salaire.

Si vous voulez juste un enregistrement avec Max salaire, utilisez Row_Number () code>. P>

select
    title,
    first_name, 
    last_name,
    salary
from
(select 
    distinct p.title, 
    e.first_name, 
    e.last_name,
    salary,
    dense_rank() over (partition by title order by salary desc) as rnk
 from employees as e
 inner join employees_projects as ep
 on e.id = ep.employee_id
 inner join projects as p
 on p.id = ep.project_id
 group by 1,2,3
 ) t
 where rnk = 1
 order by title


1 commentaires

@ Mr-SK GROND POUR ETEDER QUOI fonctionne. Si cela fonctionne pour vous, veuillez l'accepter s'il vous plaît en cliquant sur la marque, merci.



2
votes

En supposant que vous voulez une ligne par titre, utilisez distinct sur : xxx

Si vous pouvez avoir plusieurs titres, vous pouvez utiliser rang ( ) ou dense_rank () dans une sous-requête: xxx


0 commentaires

0
votes

Ceci est fondamentalement le cas lorsque le groupe par le groupe ne peut pas être utilisé, ce qui vous voulez que vous voulez également avoir une perte de toutes les colonnes.

Vous pouvez simplement utiliser ci-dessous P>

   Select * from (
  select distinct p.title, e.first_name, 
   e.last_name,  e.salary
   , rank()
   Over(partition by 1 order by 
    e.salary desc) 
     ) rn

   from employees as e
   inner join employees_projects as ep
   on e.id = ep.employee_id
   inner join projects as p
   on p.id = ep.project_id) 
  Where rn=1


0 commentaires