如图,这样的一张表,:同样的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
我想问下这样还有其他的写法能比这个效率高吗?期待各位大神的回复,在这里先谢谢大家了!
不用每次查询的时候,都重新查一下数据的总行数,你可以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
恩恩,速度快了一些,但是不知道还没有更好的办法哈
WITH SELECT COUNT(1) FROM WAN AS TOTAL_COUNT SELECT status, -- count(1) / TOTAL_COUNT 确定到几位自己实现吧 FROM WAN GROUP BY status; --这样试试看看行不行?
这样TOTAL_COUNT只查了一次
恩,这样分开查确实好一些,谢谢哈
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;
谢谢哈,虽然我没有看太懂~~~~(>_<)~~~~