首页新闻找找看学习计划

sql语句统计百分比的问题

0
悬赏园豆:10 [已解决问题] 解决于 2015-11-26 18:24

如图,这样的一张表,:同样的status在所有数据中所占的比例,比如状态为1的在所有数据中比例是0.25。

我刚开始写的SQL是两个子查询,一个统计总数,一个统计status为1的数量,sql语句是这样写的:

  select  p1.status ,cast((p1.total*1.0/(select COUNT(*) as 
   total from wan  )) as decimal(18, 2)) as total from
     (select status,COUNT(1) total from wan group by status) p1


我想问下这样还有其他的写法能比这个效率高吗?期待各位大神的回复,在这里先谢谢大家了!

笨笨的菜鸟的主页 笨笨的菜鸟 | 初学一级 | 园豆:40
提问于:2015-11-25 11:52
< >
分享
最佳答案
0

  不用每次查询的时候,都重新查一下数据的总行数,你可以declare一个变量,设置值是total row count,代码仅提供一种思路,,,,

declare @totalrowcount bigint
select @totalrowcount=COUNT_BIG(0)
from yourtable

select status, count(0)*1.0/@totalrowcount as percent
from yourtable
group by status
收获园豆:4
悦光阴 | 老鸟四级 |园豆:2239 | 2015-11-25 17:28

恩恩,速度快了一些,但是不知道还没有更好的办法哈

笨笨的菜鸟 | 园豆:40 (初学一级) | 2015-11-26 18:19
其他回答(2)
0
WITH SELECT COUNT(1) FROM WAN AS TOTAL_COUNT
SELECT status, -- count(1) / TOTAL_COUNT 确定到几位自己实现吧
FROM WAN GROUP BY status;
--这样试试看看行不行?

这样TOTAL_COUNT只查了一次

收获园豆:3
之奇一昂 | 园豆:1421 (小虾三级) | 2015-11-25 14:34

恩,这样分开查确实好一些,谢谢哈

支持(0) 反对(0) 笨笨的菜鸟 | 园豆:40 (初学一级) | 2015-11-26 18:18
0

DECLARE @t TABLE(id INT ,[STATUS] int);
INSERT INTO @t (id,[status]) VALUES(1,0),(2,3),(3,4),(4,2),(5,1),(6,3)

SELECT [status]*1.0/sum([status]) OVER() FROM @T;

收获园豆:3
gw2010 | 园豆:1394 (小虾三级) | 2015-11-26 15:54

谢谢哈,虽然我没有看太懂~~~~(>_<)~~~~

支持(0) 反对(0) 笨笨的菜鸟 | 园豆:40 (初学一级) | 2015-11-26 18:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册