0
votes

Trouver le nom du joueur qui a marqué le nombre maximum de buts?

Je dois trouver le nom du buteur et des buts de but maximum marqué.

but_details (Goal_id, player_id, taper_id, goot_time)

lecteur_mast (player_id , Joueur_Name)

J'ai fait cela en utilisant Joindre mais incapable de le faire avec sous-requête. S'il vous plaît aider.

1ère approche: xxx

2ème approche: xxx

3ème approche: < / p> xxx

Je sais que ceux-ci imprimeront que les noms ne sont que des objectifs totaux marqués, mais ils ne sont même pas d'imprimer des noms.

Où je le fais mal?


0 commentaires

3 Réponses :


0
votes

J'utiliserais row_number ici: xxx

Si vous préférez capturer tous les joueurs liés à la première place, remplacez-la, remplacez Row_Number avec rang . Notez que j'ai agrégé à la fois par player_id et lecteur_name , au cas où deux joueurs peuvent avoir le même nom.


2 commentaires

Après 1 heure, j'ai mon examen SQL si vous pouvez me dire les erreurs dans le programme ci-dessus, il sera vraiment utile de savoir pourquoi il n'imprime pas le nom du meilleur buteur? Je sais que votre méthode est la meilleure mais maintenant, le temps est moins s'il vous plaît aider frère


@akashking honnêtement la version que j'ai donnée ci-dessus est ce que je recommanderais d'utiliser ici. Vous attendez-vous à être invité à écrire la requête d'une autre manière?



0
votes
with goal_details(goal_id,player_id,team_id,goal_time) as (
select 1, 1, 1, 10 from dual union all
select 2, 2, 2, 20 from dual union all
select 3, 2, 2, 30 from dual union all
select 3, 3, 3, 30 from dual
),
player_mast(player_id,player_name) as (
select 1, 'First'  from dual union all
select 2, 'Second' from dual union all
select 3, 'Thirth' from dual
)
select
max(p.player_id)   keep (dense_rank last order by count(*))              as max_scorer_id,
max(p.player_name) keep (dense_rank last order by count(*), p.player_id) as max_scorer_mame,
max(count(*))                                                            as max_count
from goal_details d
join player_mast  p on p.player_id = d.player_id
group by p.player_id, p.player_name;

MAX_SCORER_ID MAX_SC  MAX_COUNT
------------- ------ ----------
            2 Second          2

0 commentaires

0
votes

Où je le fais mal?

Vous obtenez un ora-00913: trop de valeurs exception

Ceci est parce que vous avez la syntaxe: xxx

et votre filtre dans doit avoir le même nombre de valeurs à gauche comme dans la liste à droite; Donc, supprimez la partie (lecteur_id) partie de vos valeurs de retour de la sous-requête: xxx

alors votre première tentative devrait fonctionner: < Pré> xxx

dB <> violon


0 commentaires