10 meilleurs valeurs sur plusieurs lignes et colonnes

worms_33
Invité n'ayant pas de compte PHPfrance

26 mai 2011, 15:00

Bonjour à tous,

Je bloque sur une requête où je dois sortir les 10 plus grandes valeurs parmi 5 colonnes (col2 à col6) et n lignes...


Exemple :

Code : Tout sélectionner

col1 col2 col3 col4 col5 col6 row 1 nom1 25 250 12 5000 5487 row 2 nom2 78 157 20 511 210 row 3 nom3 0 25 30 48 78 etc..
donc il faut que je sorte :

Code : Tout sélectionner

nom1 5487 nom1 5000 nom2 511 nom1 250 nom2 210 etc... jusqu'à 10
J'ai une piste avec la fonction greatest mais j'arrive pas à sortir les meilleurs en croisant les colonnes et les lignes...

Merci pour votre aide

Petit nouveau ! | 4 Messages

26 mai 2011, 15:27

La solution c'est

SELECT data.id, MAX(data.col)
FROM (
(SELECT col1 as col, id FROM `test`)
UNION
(SELECT col2 as col, id FROM `test`)
UNION
(SELECT col3 as col, id FROM `test`)
UNION
(SELECT col4 as col, id FROM `test`)
)
data GROUP BY data.id

N'y a t-il pas un problème de modélisation ? se retrouver à devoir faire un max sur plusieurs colonnes ne m'est jamais arrivé.

worms_33
Invité n'ayant pas de compte PHPfrance

26 mai 2011, 17:20

Merci pour ta réponse.

Je ne sais pas comment il aurait fallu faire sinon?

Je dois enregistrer 5 valeurs modifiables pour différentes personnes.

Petit nouveau ! | 4 Messages

26 mai 2011, 17:49

5 Valeurs de même nature, exemple 5 scores à un test :
personne(id, nom, prénom)
score(id_personne, points)

id_personne dans score te permettant de faire la jointure.