每种状态我都需要百分比
Select NAME,STATUS,Count(*) From DATA
group by NAME,STATUS
order by NAME
我认为您在百分比计算中使用了以下公式, count(第一个行)* 100 /所有计数行的总和,即448 * 100/1560 = 28.71。 所以,亲爱的,我请您提出所有问题。
尝试以下查询,并享受其中。
Select NAME,STATUS,Count(*),Count(*)*100/(select sum(CT) from (select NAME,Count(*) CT from data group by NAME,STATUS))PERCENTAGE
From DATA
group by NAME,STATUS
order by NAME
,
您需要创建无状态计数的子查询,然后需要明智地获取百分比的用户,您可以在下面进行尝试:
Select f1.NAME,f1.STATUS,CONCAT((Count(*)*100)/(select Count(*) from data f2 where NAME=f1.Name group by f2.NAME),'%') From DATA f1
group by f1.NAME,f1.STATUS
order by f1.NAME
或者,如果您有用户名,那么查询效果更好,结果更完美
Select f1.NAME,CONCAT((Count(*)*100)/(select Count(*) from data f2 where UserId=f1.UserId group by f2.UserId),'%') From DATA f1
group by f1.UserId,f1.NAME,f1.STATUS
order by f1.NAME
,
以下是获取百分比的方法。首先是获取总计count()
,然后乘以1.0
,以将结果转换为decimal
格式。
select name,status,count(1),((count(1) * 1.0)
/(select count(1) from data)) * 100 as percentage
from data
group by name,status
order by name
,
选中此项,使用SUM计算总数,然后使用分组依据对名称进行分组
SELECT name,COUNT(status)/(
SELECT COUNT(status)
FROM data
)*100
FROM percentage
GROUP BY name,status
ORDER BY name