He pasado mucho tiempo buscando esto, por favor, avíseme si es duplicado.SQL: Agrupar por recuento (*) como porcentaje del total de filas de la tabla
Necesito escribir una consulta agrupada que devuelva las categorías de registros con el recuento de cada tipo de categoría. Algo como esto:
select categorynum, count(*) from tbl group by categorynum;
Hasta ahora todo bien. Ahora lo que necesito es determinar qué porcentaje del total del recuento de cada categoría ocupa. El mejor que he llegado con esto es que no me gusta, se siente sucia:
select categorynum, count(*), count(*)/(select count(*) from tbl) from tbl group by categorynum;
Funciona, pero en realidad me molesta hacerlo de esta manera. La base de datos que uso es compatible con la sintaxis de Postgres, y count(*)
en una tabla es muy rápido, por lo que no hay una gran velocidad para hacer un count(*)
sobre la mesa, aunque me gustaría escribir un mejor SQL si es posible.
¿Hay alguna forma mejor de escribir esto? Esta es una situación con la que me encuentro a menudo, así que me gustaría escribir mis consultas correctamente.
Esto es más complicado que el original, pero ¿funcionaría más rápido? Este tipo de consulta tiene muchas aplicaciones potenciales, ¡gracias por el puntero! –
Bueno, si hay pocos valores de 'categorynum' relativos al número de filas en' tbl', la mayor parte del trabajo se realizará en la subconsulta. Si la proporción de distintos 'categorynums' relativos al número de filas en' tbl' es relativamente alta, entonces la 'suma' puede ralentizar demasiado. Verificaría el plan de consulta a través de una 'explicación' para ambas consultas. Y eres bienvenido. :) –