Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/09/2009, 02:04
quimfv
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