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

porcentajes de acuerdo a totales

Estas en el tema de porcentajes de acuerdo a totales en el foro de Mysql en Foros del Web. A ver quien me puede ayudar Tengo una tabla (documento) con un campo llamado status el cual puede tomar los valores: new,view,ok,down; otros campos que ...
  #1 (permalink)  
Antiguo 03/09/2009, 04:22
Avatar de Fabu_dina  
Fecha de Ingreso: enero-2004
Mensajes: 425
Antigüedad: 20 años, 3 meses
Puntos: 1
porcentajes de acuerdo a totales

A ver quien me puede ayudar

Tengo una tabla (documento) con un campo llamado status el cual puede tomar los valores: new,view,ok,down; otros campos que toman los valores de acuerdo a status llamado motivo y motivob

digamos si el campo
status = `view' motivo puede tomar valores como 1,2,3; motivob=null
status = 'new' motivo = null y motivob = null
status = 'ok' motivo = null y motivob = null
status = 'down' motivo = null y motivob puede tomar a,b y c

Lo que necesito hacer es una consulta que me refleje el total de los registros y un porcentaje de cada uno de ellos


Me explico con datos


Código HTML:
<table width="400" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td>id</td>
    <td>status</td>
    <td>motivo</td>
    <td>motivob</td>
  </tr>
  <tr>
    <td>1</td>
    <td>new</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>2</td>
    <td>view</td>
    <td>2</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>3</td>
    <td>view</td>
    <td>3</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>4</td>
    <td>view</td>
    <td>1</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>5</td>
    <td>view</td>
    <td>2</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>6</td>
    <td>new</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>7</td>
    <td>new</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>8</td>
    <td>down</td>
    <td>&nbsp;</td>
    <td>a</td>
  </tr>
  <tr>
    <td>9</td>
    <td>down</td>
    <td>&nbsp;</td>
    <td>a</td>
  </tr>
  <tr>
    <td>10</td>
    <td>down</td>
    <td>&nbsp;</td>
    <td>b</td>
  </tr>
  <tr>
    <td>11</td>
    <td>down</td>
    <td>&nbsp;</td>
    <td>c</td>
  </tr>
  <tr>
    <td>12</td>
    <td>ok</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>13</td>
    <td>ok</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>14</td>
    <td>ok</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table> 

el total es 14

el total para new es 3 el porcentaje es 21.42%
el total para view es 4 el porcentaje es 28.57%
el total para down es 4 el porcentaje es 28.47%
el total para ok es 3 el porcentaje es 21.42%

la suma de porcentajes me da el 100%

de view2 es 2 con porcentaje 14.28%
de view3 es 1 con porcentaje 7.14%
de view1 es 1 con porcentaje 7.14%

la suma son el % total de view

y asi para cada caso

alguien puede sugerirme alguna sentencia sql para sacar esta informacion en una sola corrida

muchas gracias ya que llevo tiempo queriendo sacar esto y no he llegado al resultado.
  #2 (permalink)  
Antiguo 04/09/2009, 02:04
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: porcentajes de acuerdo a totales

Se puede sacar con una sola sentencia pero no sera mucho mas eficiente...

Simplificando

Tabla
Tipo:::Tipo2::Valor
1:::::::1:::::::50
1:::::::1:::::::25
1:::::::2:::::::30
2:::::::1:::::::50
2:::::::2:::::::30

en este caso tenemos 5 registros tres de tipo 1 y dos de tipo 2 etc...

Código sql:
Ver original
  1. SELECT COUNT(*) AS total FROM Tabla

nos dadrá

total
5

Código sql:
Ver original
  1. SELECT tipo,COUNT(*) AS parcial FROM tabla GROUP BY tipo

nos dará

tipo::parcial
1:::::3
2:::::2

para obtener los porcentages es cuestion de combinar adequadamente los resultados, eso se puede hacer en la sentencia sql o fuera...


Código sql:
Ver original
  1. SELECT tipo,
  2.              COUNT(*) AS parcial,
  3.              (COUNT(*)/(SELECT COUNT(*) FROM Tabla))*100 AS porcentage
  4. FROM tabla
  5. GROUP BY tipo


Pregunta
quantas veces se ejecutará la sentencia "SELECT count(*) FROM Tabla"

para complicarlo puedes ver que da esto

Código sql:
Ver original
  1. SELECT tipo,tipo2,COUNT(*) AS parcial FROM tabla GROUP BY tipo,tipo2

o esto

Código sql:
Ver original
  1. SELECT t1.tipo,
  2. t1.tipo2,
  3. COUNT(*) AS parcial,
  4. (COUNT(*)/(SELECT COUNT(*) FROM Tabla t2 WHERE t2.tipo=t1.tipo))*100 AS porcentage
  5. FROM tabla t1
  6. GROUP BY tipo,tipo2

Tambien tendiras la posibilidad de sumar valor (sum(valor)) o de sacar la media AVG(VALOR)....


Quim
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 04:23.