10 meilleurs valeurs sur plusieurs lignes et colonnes

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : 10 meilleurs valeurs sur plusieurs lignes et colonnes

Re: 10 meilleurs valeurs sur plusieurs lignes et colonnes

par romje » 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.

Re: 10 meilleurs valeurs sur plusieurs lignes et colonnes

par worms_33 » 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.

Re: 10 meilleurs valeurs sur plusieurs lignes et colonnes

par romje » 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é.

10 meilleurs valeurs sur plusieurs lignes et colonnes

par worms_33 » 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