Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Consulta SQL con porcentajes

Estas en el tema de Consulta SQL con porcentajes en el foro de Bases de Datos General en Foros del Web. Buenos días, este es mi primer mensaje. He estado bsucando por la web, pero no he encontrado nada similar, así que allá voy con mi ...
  #1 (permalink)  
Antiguo 22/04/2010, 00:26
 
Fecha de Ingreso: abril-2010
Mensajes: 3
Antigüedad: 14 años
Puntos: 0
Consulta SQL con porcentajes

Buenos días, este es mi primer mensaje.
He estado bsucando por la web, pero no he encontrado nada similar, así que allá voy con mi consulta:

Tengo una base de datos con una tabla de usuarios, y me piden que pueda sacar búsquedas del tipo:

que un 60% sean hombres y un 40% mujeres
y además que 30% sean extranjeros y 70% nacionales
y además que xx% sean nnnnnnnn y xx% nnnnnnnn
etc.

Alguien tiene alguna idea de cómo hacerlo?

Trabajo con PHP, así que si a alguien se le ocurre alguna idea de cómo hacerlo en PHP, le estaría agradecido también.

Muchas gracias de antemano.


Saludos
  #2 (permalink)  
Antiguo 22/04/2010, 01:59
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta SQL con porcentajes

Si trabajas en php luego sabras obtener datos de la bbdd.

Entonces solo debes obtener los necesris para calcular los %.

Total de registros
Código MySQL:
Ver original
  1. SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES
  2. WHERE table_schema = 'tubasededatos'
  3. AND table_name="tutabla"

Registros de cada grupo.

Código MySQL:
Ver original
  1. SELECT nnnnn, count(*) reggrupo
  2. FROM tutabla
  3. GROUP BY nnnnn

Luego con un bucle sobre la sengunda consulta puedes dividir reggrupo por regtotal y obtendras los %

Quim
  #3 (permalink)  
Antiguo 22/04/2010, 06:41
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta SQL con porcentajes

Debes jugar un poco con algunas funciones de mysql para obtener el resultado esperado.

Por ejemplo... para promedio de homberes y mujeres.

Código MySQL:
Ver original
  1. mysql> select *from usuarios;
  2. +---------+------+
  3. | nombre  | sexo |
  4. +---------+------+
  5. | daniel  | M    |
  6. | daniela | F    |
  7. | sara    | F    |
  8. | natalia | F    |
  9. +---------+------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> select
  13.     -> if(sexo='M','Hombres','Mujeres') sexo,
  14.     -> count(*) numero,
  15.     -> concat(round(count(*)/t1.total*100),' ','%') promedio
  16.     -> from usuarios,
  17.     -> (select count(*) total from usuarios)t1
  18.     -> group by sexo;
  19. +---------+--------+----------+
  20. | sexo    | numero | promedio |
  21. +---------+--------+----------+
  22. | Mujeres |      3 | 75 %     |
  23. | Hombres |      1 | 25 %     |
  24. +---------+--------+----------+
  25. 2 rows in set, 1 warning (0.00 sec)

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 23/04/2010, 00:50
 
Fecha de Ingreso: abril-2010
Mensajes: 3
Antigüedad: 14 años
Puntos: 0
Respuesta: Consulta SQL con porcentajes

Hola,

Gracias por contestar.
Creo que no nos hemos entendido.

Lo que yo quiero es lo siguiente, o sea el usuario "dirá":

Quiero un listado de XX personas de las cuales el 20% debe ser mujeres y el 80% hombres, y además el 40% nacionales y el 60% extranjeros.

Esto se puede hacer? (repito, si no hay forma con sql, no hay problema en hacerlo con php)

Muchísimas gracias!!!!!
  #5 (permalink)  
Antiguo 23/04/2010, 09:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta SQL con porcentajes

Lo primero que debes controlar es la fórmula matemática.
Un 20% de un 40% es 8% del total (se saca multiplicando los porcentajes y dividiendo por 100)
Un 80% de un 40% es 32% del total
Un 20% de un 60% es un 12% del total
Un 80% de un 60% es un 48% del total
Tendrías que saber el total, el XX, y aplicar los porcentajes, en tu caso con PHP, sobre ese número y cargarlos en variables. Eso lo puedes hacer fácilmente con variables PHP, que luego incluirás en los LIMIT de las consultas. Buscas que sean encontrados al azar, imagino (tendrás que usar ORDER BY RAND, aunque habría que alguna otra solución que realmente fuese más azarosa). Yo la consulta la haría con UNION ALL del siguiente modo (entiendo cun camponac. que puede ser extranjero, E, o nacional, N), aunque también podrías hacer por separado la consulta y luego reunir los datos en un array.
Código MySQL:
Ver original
  1. (SELECT campo1, campo2, campo3  FROM mitabla
  2.  WHERE sexo = 'F' AND camponac='E'
  3.  ORDER BY RAND LIMIT 0,variable8porcientosobreXX)
  4. (SELECT campo1, campo2, campo3  FROM mitabla
  5.  WHERE sexo = 'F' AND camponac='N'
  6.  ORDER BY RAND LIMIT 0,variable32porcientosobreXX)
  7. (SELECT campo1, campo2, campo3  FROM mitabla
  8.  WHERE sexo = 'M' AND camponac='E'
  9.  ORDER BY RAND LIMIT 0,variable12porcientosobreXX)
  10. (SELECT campo1, campo2, campo3  FROM mitabla
  11.  WHERE sexo = 'M' AND camponac='N'
  12.  ORDER BY RAND LIMIT 0,variable48porcientosobreXX)

Esta es la idea. Los números deben cuadrar, es decir, el XX, debe permitir sacar esos porcentajes. No siempre es posible la exactitud en este tipo de datos. No podemos sacar decimales, es decir, dividir a los individuos. ¿Y qué ocurriría si de un tipo de los buscados no hay suficientes para hacer esa parte del porcentaje? Tendrías que controlar las cantidades devueltas por las consultas para ajustar o avisar.

Última edición por jurena; 23/04/2010 a las 10:19
  #6 (permalink)  
Antiguo 26/04/2010, 00:52
 
Fecha de Ingreso: abril-2010
Mensajes: 3
Antigüedad: 14 años
Puntos: 0
Respuesta: Consulta SQL con porcentajes

Muchísimas gracias Jurena, no lo he probado aún pero pinta muy pero que muy bien.
Ya comentaré a ver como me ha ido.

Muchas gracias a todos!!

Etiquetas: porcentajes, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 19:01.