J'ai un examen final dans les bases de données et comme je résolvais quelques exemples de questions, j'ai rencontré quelques problèmes.SQL - INTERSECT avec HAVING + MAX d'un SUM
J'ai une relation de plusieurs à plusieurs entre 2 tables.
Player PlayerTournament Tournament
------- -------------------- -------------------
pk id_player fk id_player pk id_tournament
name fk id_tournament name
rank year city
country victories court_surface
tournament_type
Ce que je dois faire est:
1). Listez les joueurs (nom et pays) qui, en 2016, ont gagné au moins un match dans un tournoi d'argile, mais n'ont participé à aucun tournoi d'herbe.
2). Dressez la liste des joueurs (nom, pays, nombre total de victoires) avec le plus grand nombre de victoires.
Je pensais à quelque chose comme ceci:
1. SELECT P.NAME, P.COUNTRY
FROM Player P INNER JOIN PlayerTournament PT
ON P.ID_PLAYER= PT.ID_PLAYER
INNER JOIN Tournament T
ON T.ID_TOURNAMENT= PT.ID_TOURNAMENT
WHERE T.COURT_SURFACE="clay"
GROUP BY (something)
HAVING SUM(PT.VICTORIES)>=1
INTERSECT
(same select and inner joins)
WHERE T.COURT_SURFACE="grass"
GROUP BY (something)
HAVING COUNT(ID_PLAYER)=0
2.SELECT P.NAME, P.COUNTRY, SUM(PT.VICTORIES)
FROM Player P INNER JOIN PlayerTournament PT
ON P.ID_PLAYER= PT.ID_PLAYER
GROUP BY ...
HAVING sum of victories = max sum of victories
Je ne sais pas si la façon dont je pense que le problème est correct, je besoin d'aide pour les déclarations « ayant ».