Valeur representative d'une colonne
Bonjour,
je cherche une requête, sans sous requête, me permettant de trouver le mode dans une mesure de tendance centrale.
ex : valeurs vr -> A,A,B,B,B,C,D,E,E,E,E,E
me retourne E qui est la valeur la plus présente.
Actuellement je fait (de manière simplifié):
Code:
1 2 3 4 5 6
| SELECT vr
FROM (SELECT vr
FROM matable
GROUP BY vr
ORDER BY COUNT(*) DESC)
WHERE ROWNUM=1; |
Le contexte d'utilisation actuel (un peu plus complexe) étant :
Code:
1 2 3 4 5 6 7 8
| SELECT t1.*
,(SELECT vr
FROM (SELECT vr,code
FROM t2
GROUP BY vr,code
ORDER BY COUNT(*) DESC)
WHERE ROWNUM=1 AND code=t1.code) AS vr
FROM t1; |
Si la table t2 est importante les temps de réponses peuvent être dégradés
et une requête de la forme :
Code:
1 2 3 4 5 6 7 8 9
| SELECT t1.*
,(SELECT vr
FROM (SELECT vr
FROM t2
WHERE code=t1.code
GROUP BY vr
ORDER BY COUNT(*) DESC)
WHERE ROWNUM=1) AS vr
FROM t1; |
ne retourne pas les bonnes valeurs.
J'ai déjà remarqué que 2 niveaux de sous-requêtes posaient problème lors de l'utilisation de valeur de la requête principale dans la sous-sous-requête.
J'ai cherché un peu dans les requêtes analytiques mais je n'ai pas trouvé comment formuler cela correctement.
Donc si vous avez des idées ou des remarques, je suis preneur.
Cordialement
P.S.: Oracle 10g ou plus