Foros del Web » Programando para Internet » PHP »

Obtener porcentaje enconsulta de Base de Datos

Estas en el tema de Obtener porcentaje enconsulta de Base de Datos en el foro de PHP en Foros del Web. Saludos a tod@s Pues tengo la siguiente consulta: Código PHP: $sql_a  =  "SELECT * FROM departaments WHERE departament_id !=1 ORDER BY departament_name" ; $result  =  pg_query ( $sql_a ); //Iterar a través de cada uno de los departamentos/gerencias if ( $result ) {    while( ...
  #1 (permalink)  
Antiguo 26/02/2009, 07:00
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Obtener porcentaje enconsulta de Base de Datos

Saludos a tod@s

Pues tengo la siguiente consulta:

Código PHP:
$sql_a "SELECT * FROM departaments WHERE departament_id !=1 ORDER BY departament_name";
$result pg_query($sql_a);
//Iterar a través de cada uno de los departamentos/gerencias
if ($result) {
   while(
$a pg_fetch_array($result)) {
        
$name ucwords($a['departament_name']);
    
$id_dept $a['departament_id'];
    
//Crear una segunda consulta para obtener detalles de estos departamentos
    
$sql_b "SELECT COUNT(*) AS id FROM atentions WHERE departament_id= " $id_dept " AND atention_date >='".$fecha_inicio."' AND atention_date <='".$fecha_hasta."' ";
           
$result2 pg_query($sql_b); 
    
$b pg_fetch_array($result2);
    
$id $b['id'];
   }

Y lo que no he podido hacer es obtener un porcentaje de cada uno de los departamentos, intenté hacer el segundo select con la función SUM pero no he podido establecer el porcentaje. Agradecería mucho un poco de ayuda. Muchas gracias por la atención.

Walleska
  #2 (permalink)  
Antiguo 26/02/2009, 07:42
 
Fecha de Ingreso: enero-2008
Mensajes: 52
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: Obtener porcentaje enconsulta de Base de Datos

Supongo que quieres saber el porcentaje de atentions de un departamento respecto al total de atentions de todos segun la consulta, necesitarias saber el total, puedes hacerlo por una query de la siguiente manera:

Código PHP:
$sqltotal "SELECT COUNT(*) AS total
FROM atentions a, departamentos d 
WHERE 
    a.departament_id= d.id 
    AND a.atention_date >='"
.$fecha_inicio."' 
    AND a.atention_date <='"
.$fecha_hasta."'
    AND d.id != 1"
;

$res =  pg_query($sql);

$t pg_fetch_array($res);
$total $t["total"];

$sql "SELECT d.id as idDep, COUNT(*) AS contador 
FROM atentions a, departamentos d 
WHERE 
    a.departament_id= d.id 
    AND a.atention_date >='"
.$fecha_inicio."' 
    AND a.atention_date <='"
.$fecha_hasta."'
    AND d.id != 1
GROUP BY d.id"
;

$res =  pg_query($sql);

while (
$linea pg_fetch_array($res)){
    
$linea["porcentaje"] = $linea["contador"] / $total;
    
$r[]= $linea["id"]
}

foreach(
$r as $key => $val){
    
$val["idDep"] -> id Departamento
    $val
["porcentaje"] -> Porcentaje de atentions
    $val
["contador"] -> Numero de atentions

Esto haces 2 querys una para saber el total y otra para saber el de cada uno, la otra opcion es hacerlo por codigo, tendrias que recorrer todos los departamentos para saber el total y luego recorrerlo otra vez para calcular el porcentaje.

(no he probado el codigo asi que es susceptible a tener algun fallo)
  #3 (permalink)  
Antiguo 26/02/2009, 08:04
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Obtener porcentaje enconsulta de Base de Datos

Gracias por responder seiferdrg

Entiendo el planteamiento que me estás haciendo, estoy probando el código y no entiendo muy estas líneas:

Código PHP:
foreach($r as $key => $val){
    
$val["idDep"] -> id Departamento
    $val
["porcentaje"] -> Porcentaje de atentions
    $val
["contador"] -> Numero de atentions

Me da error, no habrá que colocarle un ";" al cerrar las llaves?

Gracias por tu paciencia.

Walleska
  #4 (permalink)  
Antiguo 26/02/2009, 08:20
 
Fecha de Ingreso: junio-2005
Mensajes: 343
Antigüedad: 18 años, 10 meses
Puntos: 10
Respuesta: Obtener porcentaje enconsulta de Base de Datos

Prueba a poner esta consulta y recorrer los resultados. Así de cabeza no estará 100% bien, pero seguro que no le falta mucho

Código PHP:
$sql "SELECT CAMPO_NOMBRE_DEPARTAMENTO, COUNT(*) num, round(count(*)/tt.total,2) AS percent FROM atentions join (SELECT COUNT(*) total FROM atentions)tt inner join departaments on (atentions.departament_id = departaments.NOMBRE_DEL_CAMPO_CON_ID) WHERE atention_date >='".$fecha_inicio."' AND atention_date <='".$fecha_hasta."' "

  #5 (permalink)  
Antiguo 26/02/2009, 08:28
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Obtener porcentaje enconsulta de Base de Datos

Cita:
Iniciado por jorgivaz Ver Mensaje
Prueba a poner esta consulta y recorrer los resultados. Así de cabeza no estará 100% bien, pero seguro que no le falta mucho

Código PHP:
$sql "SELECT CAMPO_NOMBRE_DEPARTAMENTO, COUNT(*) num, round(count(*)/tt.total,2) AS percent FROM atentions join (SELECT COUNT(*) total FROM atentions)tt inner join departaments on (atentions.departament_id = departaments.NOMBRE_DEL_CAMPO_CON_ID) WHERE atention_date >='".$fecha_inicio."' AND atention_date <='".$fecha_hasta."' "

Gracias jorgivaz por tu pronta respuesta.

probé la consulta en el pgAdmin, y te comento, me sale el siguiente error:
ERROR: syntax error at end of input
SQL state: 42601
Character: 228
  #6 (permalink)  
Antiguo 26/02/2009, 08:32
 
Fecha de Ingreso: junio-2005
Mensajes: 343
Antigüedad: 18 años, 10 meses
Puntos: 10
Respuesta: Obtener porcentaje enconsulta de Base de Datos

No se si en postgreeSQL los join funcionan igual que en mysql.

En mysql deberia de funcionar, no tengo ningún pgsql para probar.
  #7 (permalink)  
Antiguo 26/02/2009, 11:05
 
Fecha de Ingreso: enero-2008
Mensajes: 52
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: Obtener porcentaje enconsulta de Base de Datos

Código PHP:
foreach($r as $key => $val){
    
$val["idDep"] -> id Departamento
    $val
["porcentaje"] -> Porcentaje de atentions
    $val
["contador"] -> Numero de atentions

Esto era solo para que supieras que hay en cada campo, logicamente no es ejecutable.
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




La zona horaria es GMT -6. Ahora son las 23:38.