带有计数和百分比的SQL分组语句
我有一张这样的桌子 我想计算按状态类型分组的状态总数,以及它与特定ID1和ID2相关的状态数的百分比 一个示例输出是带有计数和百分比的SQL分组语句,sql,sql-server,sql-server-2008,group-by,Sql,Sql Server,Sql Server 2008,Group By,我有一张这样的桌子 我想计算按状态类型分组的状态总数,以及它与特定ID1和ID2相关的状态数的百分比 一个示例输出是 ID1 ID2 Status Count Percentage --- --- ------ ----- ---------- 1 33 0 2 50% 1 33 1 2 50% 1 34 1 1 50% 1 34
ID1 ID2 Status Count Percentage
--- --- ------ ----- ----------
1 33 0 2 50%
1 33 1 2 50%
1 34 1 1 50%
1 34 2 1 50%
2 33 0 2 100%
2 34 0 1 100%
到目前为止,我只能得到总数,但没有得到百分比。这是我现在的问题
select ID1, ID2 , status, count(ID2) as Count
from
StatTable
group by ID1, ID2, status
您可以通过使用窗口函数获取每个
id1
,id2
组合的总百分比:
select ID1, ID2 , status, count(*) as cnt,
count(*) * 100.0 / count(*) over (partition by id1, id2) as Percentage
from StatTable
group by ID1, ID2, status;
您可以通过使用窗口函数获取每个
id1
,id2
组合的总百分比:
select ID1, ID2 , status, count(*) as cnt,
count(*) * 100.0 / count(*) over (partition by id1, id2) as Percentage
from StatTable
group by ID1, ID2, status;
我对Gordon查询做了一些小改动,现在它与您期望的答案匹配了-
select ID1, ID2 , status, count(*) as cnt,
100.0 / count(*) over (partition by id1, id2) as Percentage
from table1TEmp
group by ID1, ID2, status;
我对Gordon查询做了一些小改动,现在它与您期望的答案匹配了-
select ID1, ID2 , status, count(*) as cnt,
100.0 / count(*) over (partition by id1, id2) as Percentage
from table1TEmp
group by ID1, ID2, status;
这对我有用
select ID1, ID2 , status, count(ID2) as cnt,
count(ID2) * 100.0 / (select count(ID2) from StatTable group by ID1) as Percentage
from StatTable
group by ID1, ID2, status;
这对我有用
select ID1, ID2 , status, count(ID2) as cnt,
count(ID2) * 100.0 / (select count(ID2) from StatTable group by ID1) as Percentage
from StatTable
group by ID1, ID2, status;
谢谢你的回复。你说的窗口功能是什么意思?我得到了错误的百分比值。我正在尝试将总和计算到百分比计算中。对于表中的前四条记录,我有两条状态为0的记录和两条状态为1的记录。所以一共有4个。因此,计数(cnt)*100/和(ID2)。。。类似的吗?@user20358。不。您似乎想根据问题中的数据将
id1、id2、status
的计数除以id1、id2
的计数。在名为id
的东西上使用sum()
似乎是个坏主意。窗口函数(使用over
子句)的文档如下:。抱歉,这是我的错误。。我的意思是计数(ID2)*100/和(cnt)。。。我知道这在sql中不是这样工作的。目前,我能够使用子查询获得百分比,但不确定这是否是最好的方法。它与您所做的非常相似,除了我将“count(*)over(partition by id1,id2)”替换为“select count(id2)from stattable group by id1”的部分之外,仍然不确定我所做的方法是否是一种好方法。为之前的混乱道歉…谢谢你的回复。你说的窗口功能是什么意思?我得到了错误的百分比值。我正在尝试将总和计算到百分比计算中。对于表中的前四条记录,我有两条状态为0的记录和两条状态为1的记录。所以一共有4个。因此,计数(cnt)*100/和(ID2)。。。类似的吗?@user20358。不。您似乎想根据问题中的数据将id1、id2、status
的计数除以id1、id2
的计数。在名为id
的东西上使用sum()
似乎是个坏主意。窗口函数(使用over
子句)的文档如下:。抱歉,这是我的错误。。我的意思是计数(ID2)*100/和(cnt)。。。我知道这在sql中不是这样工作的。目前,我能够使用子查询获得百分比,但不确定这是否是最好的方法。它与您所做的非常相似,除了我将“count(*)over(partition by id1,id2)”替换为“select count(id2)from stattable group by id1”的部分之外,仍然不确定我所做的方法是否是一种好方法。为之前的混淆道歉…从gordon查询中删除100.0之前的count(*)*,您将开始得到正确答案。我用你的例子在我的机器上进行了尝试。从gordon查询中删除100.0之前的count(*)*,你将开始得到正确的答案。我用你的例子在我的机器上试过。