SQL: Группировать по счетчику (*) как процент от общего количества строк таблицы

Я потратил много времени на поиски этого, пожалуйста, дайте мне знать, если дубликаты.

Мне нужно написать сгруппированный запрос, который возвращает категории записей с подсчетом каждого типа категории. Примерно так:

select categorynum, count(*) from tbl group by categorynum;

Пока все хорошо. Теперь мне нужно определить, какой% от общего количества занимает каждая категория. Лучшее, что я придумал, - это то, что мне не нравится, это кажется грязным:

select categorynum, count(*), count(*)/(select count(*) from tbl) from tbl group by categorynum;

Это работает, но меня действительно утомляет делать это таким образом. База данных, которую я использую, совместима с синтаксисом Postgres, и count (*) в таблице очень быстрая, поэтому нет большого скачка скорости для выполнения count (*) в таблице. , хотя я бы хотел написать лучший SQL, если это вообще возможно.

Так есть ли лучший способ написать это? Это ситуация, с которой я часто сталкиваюсь, поэтому я хотел бы правильно писать свои запросы.

6
задан Gabriel Magana 4 November 2011 в 15:04
поделиться