[英]mySQL Query Count Distinct and Percentage
我在创建查询时会遇到麻烦,该查询将报告按区域内区域分组的用户的培训完成情况。 对于一个培训课程,报告需要针对每个地区显示
输出报告应该看起来像这样(没有句点):
区.........分配.......完成....%
阿肯色.......... 20 .............. 15 ............... 75%
伊利诺伊............... 80 .............. 80 ............... 100%
爱荷华................. 10 ............... 8 ............... ..80%
密歇根.......... 30 .............. 20 ................ 66%
这是我尝试使用的SQL查询
Select mytable.district as District,
(Select Count(Distinct mytable.user_id)
From mytable
Where mytable.district = District AND
mytable.training_title = 'My Course') As 'Assigned',
(Select Count(Distinct mytable.user_id)
From mytable
Where mytable.training_status = "Completed" AND
mytable.district = District AND
mytable.training_title = 'My Course') as 'Completed',
Concat(Round(100 * (Select Count(Distinct mytable.user_id)
From mytable
Where mytable.training_status = "Completed" AND
mytable.district = District AND
mytable.training_title = 'My Course') / (Select Count(Distinct mytable.user_id)
From mytable
Where
mytable.district = District AND
mytable.training_title = 'My Course'),0 ),"%") as '%'
From mytable
Where mytable.region = 'Midwest'
Group by District
这样根本行不通。 但是,如果我用WHERE子句中的“ District”替换了一个地区值(例如阿肯色州),则可以获取该地区的正确值。 但是,我需要找到每个区域的所有地区并计算地区的值。 这只是我要为其创建查询的区域之一。
两个关键问题:
建议? 提前感谢你的帮助!!!
据我所知,您可以根据需要和GROUP BY
地区进行汇总。 子查询将处理重复的行。
SELECT
district,
COUNT(*) Assigned,
COUNT(CASE WHEN training_status='Completed' THEN 1 END) Completed,
CONCAT(COUNT(CASE WHEN training_status='Completed' THEN 1 END) /
COUNT(*) * 100, '%') `%`
FROM (
SELECT DISTINCT * FROM mytable
WHERE mytable.region = 'Midwest'
AND mytable.training_title = 'My Course') z
GROUP BY district;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.