2010-12-14 37 views
0

je la requête suivante:MySQL PLUS HAUT/PLUS BAS 5 à partir d'une ligne de données

SELECT AVG(q1) AS q1, AVG (q2) AS q2, AVG(q3) AS q3, AVG(q4) AS q4, AVG(q5) AS q5 FROM tresults_acme 

q1 q2 q3 q4 q5 
8.23 5.23 7.65 8.00 7.99 

Cette requête ramène une seule ligne de données, q1 tête, q2, q3, q4, q5 - est-il possible dans MySQL juste pour montrer le plus élevé deux (q1 & q4) ou le plus bas deux (q2 & q3) - sinon dans MySQL peut-il être fait via PHP?

Merci d'avance,

Homer.

+0

http: // stackoverflow.com/questions/1914063/how-to-get-the-top-n-values-of-each-column-in-mysql –

+0

@Haim Je ne pense pas que ce soit une question à propos de 'limits' - La requête d'Homer ne renvoie qu'une ligne –

+0

Salut à tous, excuses j'aurais dû être plus clair dans ma description - est-il possible pour MySQL de retourner la forme la plus haute et/ou la plus basse qui singele rangée de données? Comme tu dis à juste titre Jack. –

Répondre

2

Vous pouvez utiliser une procédure, mais voici une façon pure SQL de le faire:

select greatest(q1,q2,q3,q4,q5) as highest_1, 
      least(greatest(q1,q2,q3,q4), 
        greatest(q1,q2,q3,q5), 
        greatest(q1,q2,q4,q5), 
        greatest(q1,q3,q4,q5), 
        greatest(q2,q3,q4,q5)) as highest_2 
    from (SELECT AVG(q1) AS q1, 
        AVG(q2) AS q2, 
        AVG(q3) AS q3, 
        AVG(q4) AS q4, 
        AVG(q5) AS q5 
      FROM tresults_acme) t; 

testé avec:

create view tresults_acme as select 1 as q1, 2 as q2, 3 as q3, 4 as q4, 5 as q5; 

Résultat:

  highest_1  |  highest_2 
    --------------------+-------------------- 
    5.0000000000000000 | 4.0000000000000000 
+0

merci pour cela - il renvoie deux nombres - bien que je sois un peu confus quant à ce que cette requête fait - seriez-vous assez bon pour expliquer un peu plus pour que je puisse comprendre? –

+0

merci - je peux voir maintenant. :-) –