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...
nos dadrá
total
5
Código sql:
Ver originalSELECT 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 originalSELECT tipo,
COUNT(*) AS parcial,
(COUNT(*)/(SELECT COUNT(*) FROM Tabla))*100 AS porcentage
FROM tabla
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 originalSELECT tipo,tipo2,COUNT(*) AS parcial FROM tabla GROUP BY tipo,tipo2
o esto
Código sql:
Ver originalSELECT t1.tipo,
t1.tipo2,
COUNT(*) AS parcial,
(COUNT(*)/(SELECT COUNT(*) FROM Tabla t2 WHERE t2.tipo=t1.tipo))*100 AS porcentage
FROM tabla t1
GROUP BY tipo,tipo2
Tambien tendiras la posibilidad de sumar valor (sum(valor)) o de sacar la media AVG(VALOR)....
Quim