Choix entre group by ou over partition
Bonjour,
Le but est de connaître les n-uplons selon un champ et récupérer un id, le login de l'utilisateur et le nombre :
Code:
1 2 3 4 5
|
SELECT sub.id, sub.login, sub.nb
FROM (SELECT id, login, COUNT(*) OVER(PARTITION BY id) AS nb
FROM utilisateur u) AS sub
WHERE nb > 1; |
ou avec cette méthode :
Code:
1 2 3 4 5 6 7 8 9
|
WITH n as (
SELECT id, COUNT(id) AS nb
FROM utilisateur u
GROUP BY id
HAVING COUNT(id) > 1
)
SELECT u.id, u.login, n.nb from UTILISATEUR u
JOIN n ON u.id_ref = n.id_ref |
Il y a quelques environ 40.000 lignes et 2000 lignes en doublons avec le même id.
Quelle méthode faudrait-il choisir ? J'ai regardé le plan d'exécution qui est différent mais les performances sont proches. La deuxième solution étant un peu plus rapide (5%).
Il existe peut-être une autre solution plus adaptée pour résoudre ce problème.
Merci de vos lumières