2012-02-11 43 views
8

Estoy tratando de crear un conjunto de datos de histograma utilizando la consulta siguiente:Cómo crear un histograma usando 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; 

siguiente es el resultado de que estoy recibiendo:

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

ahora el campo cubo es el rango o bin utilizado en el histograma. Quiero crear valores de cubeta con un rango consistente, por ejemplo, comenzando desde 0,4,8,12 ... y así sucesivamente ... ¿Hay alguna forma de lograr esto en mysql? Esta es la forma en que estoy esperando para tener como resultado:

bucket count 
0  3 
4  21 
8  6 
+0

que he proporcionado el resultado de la consulta anterior .. ¿Necesita algo extra aparte de eso? –

+0

Sería útil saber cuál es el resultado esperado (de la misma manera en que mostraste el resultado de tu consulta, Y usando los mismos datos de muestra, para entender la lógica detrás) –

+0

Estoy tratando de publicar el resultado esperado en tabulado formulario, pero no puedo hacerlo. Me disculpo porque soy nuevo en el foro –

Respuesta

7

creo que podemos usar la siguiente forma general para crear un histograma en general:

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

Dónde x es el valor real x del x eje y count(*) es el valor real y. El número 4 es la cantidad de tamaño de los valores x que queremos agrupar. Esto significa que agruparemos todos los valores de x en grupos de 4 (por ejemplo, el grupo 1 es 0, 1, 2, 3, el grupo 2 es 4, 5, 6, 7, y así sucesivamente). El recuento de cada elemento en el grupo se convierta en el valor NewY

Se puede jugar con este here

Aplicando esta lógica a su pregunta sería:

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 

, hágamelo saber si usted tiene cualquier problema o duda sobre esto.

+1

La solución que usted proporcionar está funcionando muchas gracias .... :) que sería realmente muy útil –

+1

El método anterior es correcto, excepto que no informará cubos que tengan cero muestras. – LionHeart

+0

Además, si su tamaño de contenedor no es entero, no funcionará. En su lugar, necesitará floor (value/binSize) * binSize para tamaños de contenedor no enteros. – juacala

0

Simplemente haga su cubos más grandes dividiendo Max_Irrad por 40 en lugar de 10.

+0

sí, traté de hacerlo, pero no obtuve los resultados deseados –

Cuestiones relacionadas