2012-02-11 3 views
8

Je suis en train de créer des données d'histogramme en utilisant la requête suivante:Comment créer un histogramme en utilisant MySQL

SELECT FLOOR(Max_Irrad/10) AS bucket, COUNT(*) AS COUNT 
FROM marctest.test_summarynimish 
where Lcu_name='Allegro' 
    and Lcu_Mode='Standard' 
GROUP BY bucket; 

Voici le résultat que je reçois:

bucket count 
0  3 
4  3 
5  12 
7  6 
8  3 
10  3 

maintenant le champ seau est la plage ou le bac utilisé dans l'histogramme. Je veux créer des valeurs de seau avec une gamme cohérente, par exemple à partir de 0,4,8,12 .... et ainsi de suite .. Y at-il un moyen d'y parvenir dans mysql? Voilà comment je me attends à avoir comme résultat:

bucket count 
0  3 
4  21 
8  6 
+0

J'ai fourni le résultat de la requête ci-dessus .. Avez-vous besoin tout ce que vous à part supplémentaire de cela? –

+0

Il serait utile de savoir ce que le résultat attendu est (de la même manière que vous avez affiché le résultat de votre requête, ET en utilisant ces mêmes données, afin de comprendre la logique derrière) –

+0

en essayant d'afficher le résultat attendu sous forme de tableau forme mais je suis incapable de le faire. Je m'excuse car je suis nouveau sur le forum –

Répondre

7

Je pense que nous pouvons utiliser la forme générale suivante pour créer un histogramme général:

select (x div 4) * 4 as NewX, count(*) as NewY from histogram 
group by NewX 

x est la valeur réelle x du L'axe x et count(*) est la valeur réelle y. Le nombre 4 est la taille des valeurs x que nous voulons regrouper. Cela signifie que nous regrouperons toutes les valeurs x par groupes de 4 (par exemple: le groupe 1 est 0, 1, 2, 3, le groupe 2 est 4, 5, 6, 7, etc.). Le nombre de chaque élément du groupe deviendra la valeur Newy

Vous pouvez jouer avec ce here

L'application de cette logique à votre requête ce serait:

select (floor(Max_Irrad/10) div 4) * 4 as NewX, count(*) as NewY 
from marctest.test_summarynimish 
where Lcu_name='Allegro' and Lcu_Mode='Standard' 
group by NewX 

Faites-moi savoir si vous avez tout problème ou doute à ce sujet.

+1

La solution fournir fonctionne beaucoup merci .... :) ce serait vraiment très utile –

+1

La méthode ci-dessus est correcte sauf qu'elle ne rapportera pas de godets n'ayant aucun échantillon. – LionHeart

+0

En outre, si vous êtes bin size est un non-entier, cela ne fonctionnera pas. Vous aurez besoin à la place de floor (valeur/binSize) * binSize pour les tailles de bac non entières. – juacala

0

Faites votre plus grand seaux en divisant Max_Irrad par 40 au lieu de 10.

+0

oui j'ai essayé de le faire, mais je n'ai pas eu les résultats escomptés –

Questions connexes