0
votes

Query SQL: Retour Max Value Record d'un groupe

J'ai une table d'échantillonnage avec une structure et des données similaires, comme indiqué ci-dessous:

+------+---------+-------------+------------+
| S_ID | S_NAME  | SUBJECT     | MAX_MARK   |
+------+---------+-------------+------------+
|    3 | Stud    | SUB_3       |         70 |
|    5 |  Stud_1 | SUB_2       |         50 |
|    6 |  Stud_2 | SUB_2       |         40 |
+------+---------+-------------+------------+


0 commentaires

5 Réponses :


0
votes

Utilisez Row_Number () CODE>

select * from
(
select *,row_number() over(partition by s_name order by MARK_VALUE desc) as rn
 from tablename
)A where rn=1


0 commentaires

1
votes

Utilisez Row_Number () CODE> Fonction de la fenêtre

select t1.* from table_name t1
  where t.MARK_VALUE=(select max(MARK_VALUE) from table_name t2 where t2.S_NAME=t1.S_NAME)


0 commentaires

1
votes

fonction analytique row_number code> peut être utilisé pour regrouper des lignes par s_name code> (comme vous voulez avoir une marque maximale par élève) et trier les marques dans l'ordre décroissant de sorte que le max La valeur augmente au sommet (c.-à-d. obtient numéro de ligne em> = 1).

Sélectionnez ensuite des lignes avec cette valeur de numéro de ligne. P>

 <snip>
  9  select s_id, s_name, subject, mark_value
 10  from test
 11  where (s_name, mark_value) in (select s_name, max(mark_value) max_mark
 12                                 from test
 13                                 group by s_name);

      S_ID S_NAME SUBJE MARK_VALUE
---------- ------ ----- ----------
         3 stud   sub_3         70
         5 stud_1 sub_2         50
         6 stud_2 sub_2         40

SQL>


0 commentaires

0
votes

S'il vous plaît essayez ceci.

Select B.* from @tbl AS B
INNER JOIN(
Select S_Name,MAX(MARK_VALUE) AS MARK_VALUE   from @tbl Group by S_Name) AS A
ON A.S_name=B.S_Name
AND A.MARK_VALUE = B.MARK_VALUE


0 commentaires

0
votes

Vous pouvez utiliser groupe par et garder : xxx

garder est une extension Oracle qui permet fonctionnalité comme first_value () et last_value () pour les fonctions d'agrégation. Dans mon expérience, c'est assez rapide.


0 commentaires