Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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_Sql Server_Sql Server 2008_Group By - Fatal编程技术网

带有计数和百分比的SQL分组语句

带有计数和百分比的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相关的状态数的百分比

一个示例输出是

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(*)*,你将开始得到正确的答案。我用你的例子在我的机器上试过。