按类别计算记录百分比

时间:2015-01-08 19:51:15

标签: sql

我有一个名为author的表,其中包含authorId(PK),firstname。第二个表名为article with articleID(PK),articleTitle,articleText,authorId(FK),categoryId(FK)。第三个表名为category with CategryId(PK),categoryText。

如何获取作者使用sql编写的特定categoryText的文章百分比?

1 个答案:

答案 0 :(得分:0)

使用selectgroupby并汇总名为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