我花了很多时间搜索此信息,请让我知道是否重复。SQL:按表计数(*)作为总表行数的pct
我需要编写与每个类型分类中的计数返回记录的类别分组查询。像这样的:
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。
那么有没有更好的方法来写这个?这是我经常遇到的情况,所以我想正确编写我的查询。
这比原来更复杂,但它会跑得更快吗?这种类型的查询有很多潜在的应用程序,感谢指针! –
好吧,如果'categorynum'的值相对于'tbl'中的行数很少,那么大部分工作都将在子查询中完成。如果不同'categorynums'相对于'tbl'中行数的比例相对较高,那么'sum'可能会让你减慢太多。我会通过两个查询的'explain'来检查查询计划。你非常欢迎。 :) – 2011-11-04 16:19:56