entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

chart con porcentaje de registros en php

Hola!

Tengo un nuevo desafío para, en mi caso, aprender como hacerlo.
Mi idea es utilizar divs para hacer gráficos estadísticos sin necesidad de librerías ni flash.
Por ahora lo tengo implementado así:
(imagen sin cargar removida)

Pero quisiera utilizar porcentajes en vez de número de registros.
Pregunta:

Puedo calcular el porcentaje en la consulta?
Pensaba hacer dos consultas:
consulta1= calcula el total de alumnos
consulta 2= cuenta el total de alumnos por sexo, calcula el porcentaje (como sería?) en relación con la consulta1.

Desde ya muchas gracias por ayudarme.

1voto

Leonardo-Tadei comentado

Hola Nico,

por favor, poné cómo son las consultas actualmente para poder ayudarte a calcular el porcentaje directaemnte en la query.

1voto

top21tk comentado

Hola Leonardo!

Este es el código provisorio (perdón por el desorden, a los que saben les debe hace doler los ojos)

$result=mysql_query("SELECT alumnos.sexo, count(*) as sx, alumnos.nombre from alumnos group by alumnos.sexo");
$result2=mysql_query("SELECT count(*) as total from alumnos");

if ($result==""){
echo "Error en la primera consulta";

}
while($row2 = mysql_fetch_array($result2)){ 

echo "<br><br><h1>Distribución de alumnos por sexo</h1><div style='width:".$row2["total"]."; background-color:#ffcccc'>";
}

while($row = mysql_fetch_array($result)){ 
printf("<div style='background-color:#ff0000; width:%s; margin:2'>%s = %s</div>",$row["sx"], $row["sexo"],$row["sx"]);
}
echo "</div>";

2 Respuestas

3votos

Leonardo-Tadei Puntos227320

Hola Nico,

podrías hacer una subconsulta que te devuelva el total de alumnos y devolver también los porcentajes. Sería algo así (asumiendo que la tabla tiene un campo ID:

SELECT alumnos.sexo, count(id) as sx, 
( SELECT count(a.sexo)*100/count(alumnos.id)
  FROM auimnos AS a
  WHERE a.sexo=alumnos.sexo
) as porcentaje
FROM alumnos 
GROUP BY alumnos.sexo

Si tenés normalizadas las tablas y el valor de sexo está en otro lugar, la consulta se podría reescribir de forma más fácil de leer.

Si te es posible poner un vuelvo de esta tabla con algunso datos, podemos probar la sintaxis exacta que habría que poner: temo que con los alias y las tablas llamándose iguales pueda dar un error de sintaxis, pero la idea es esa!

Saludos!

0voto

top21tk comentado

Muy bien.
Ya tengo la idea.
Mas tarde intentaré como me dices..

Muchas gracias...

0voto

top21tk comentado

OK.
No logré hacerme el tiempo para probarlo. Pero estoy seguro que esto es lo que necesitaba.
Muchas Gracias leo.

0voto

top21tk comentado

Estimados, estoy probando la consulta de leonardo y me devuelve siempre 100.0000

SELECT alumnos.sexo, count(id) as sx, 
( SELECT count(a.sexo)*100/count(alumnos.id)
  FROM alumnos AS a
  WHERE a.sexo=alumnos.sexo
) as porcentaje
FROM alumnos 
GROUP BY alumnos.sexo

2votos

lvillasante Puntos1940

Para la parte de la presentacion, podrias utilizar bootstrap (ya sea en su version 2.3.2 ó simplemente la 3) haciendo uso de su componete: Progress bars. Te dejo el enlace. Espero te sirva. http://getbootstrap.com/2.3.2/components.html#progress

0voto

top21tk comentado

Gracias por la sugerencia. No lo conocía. Tiene buen aspecto...

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta