Я потратил много времени на поиски этого, пожалуйста, дайте мне знать, если дубликаты.
Мне нужно написать сгруппированный запрос, который возвращает категории записей с подсчетом каждого типа категории. Примерно так:
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, если это вообще возможно.
Так есть ли лучший способ написать это? Это ситуация, с которой я часто сталкиваюсь, поэтому я хотел бы правильно писать свои запросы.