我有一个名为author的表,其中包含authorId(PK),firstname。第二个表名为article with articleID(PK),articleTitle,articleText,authorId(FK),categoryId(FK)。第三个表名为category with CategryId(PK),categoryText。
如何获取作者使用sql编写的特定categoryText的文章百分比?
答案 0 :(得分:0)
使用select
和groupby
并汇总名为count
的函数。你可能已经知道了。然后,请注意%
只是"命中数"除以"所有事物的数量" (可读性为100倍)。
因此,两个查询的草图如下所示:
Select count(*) from FooTable;
将结果写入某个变量,如@totalCount,然后
-- watch out for the division; the value divided must be floating-point or you'll get all zeroes
Select categoryName, 100.0*count(*)/@totalCount
from FooTable
group by categoryName
如果您的sql方言允许,如果您愿意,您可以将它们粘合到一个查询中,例如:
select categoryName, 100.0*hits/allcount
from
(
Select
categoryName,
count(*) as hits
from FooTable
group by categoryName
) as subq
cross join
(
Select
count(*) as allcount
from FooTable
) as allstats
以上在MsSqlServer上的t-SQL中没问题。但是,它会运行聚合两次(一次用于hitcounts,一次用于alllcount)。 ' allcount'没有必要。因为一旦你有了hitcounts,你可能想要在视图中动态计算总数和百分比。
编辑:同样更短
Select
categoryName,
count(*) * 100.0 / ( Select count(*) as allcount from FooTable)
from FooTable
group by categoryName