Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按类别计算记录的百分比_Sql - Fatal编程技术网

Sql 按类别计算记录的百分比

Sql 按类别计算记录的百分比,sql,Sql,我有一个名为author的表,名为authorIdPK。第二个名为article的表包含articleIDPK、articleTitle、articleText、authorIdFK、categoryIdFK。第三个表名为category,带有categryIdPK,categoryText 如何获取作者使用sql编写的特定类别文本的文章百分比?使用select和groupby以及名为count的聚合函数。你可能已经知道了。然后,请注意,%只是点击数除以所有内容数乘以100的可读性 因此,两个查

我有一个名为author的表,名为authorIdPK。第二个名为article的表包含articleIDPK、articleTitle、articleText、authorIdFK、categoryIdFK。第三个表名为category,带有categryIdPK,categoryText

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

使用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中,上述操作正常。但是,它会运行两次聚合,一次用于命中计数,一次用于所有计数。“allcount”并不是真的需要。因为一旦有命中率,您可能需要计算视图中的总计数和动态百分比

编辑:相同的甚至更短

Select
    categoryName,
    count(*) * 100.0 / ( Select count(*) as allcount from FooTable)
from FooTable
group by categoryName

我们需要看到你方的一些努力,然后才能得出答案。你使用的是哪种数据库管理系统?博士后?Oracle?ErikE我现在想的是创建一个查询:从文章中选择countarticles,但我不知道如何设置WHERE,以便连接TableArticle和category,并指定我需要一个特定的类别