大家好,我确实在MySql查询中苦苦挣扎,我有一个名为“ info”的表,并且其中有一个名为“ rating”的列,评分在1-10之间.
现在,我需要生成一个百分比值,该百分比值表示1-6、7-8和9-10中有多少评级,但我需要它们拼命显示,之后我需要第二个查询,该查询可以从中减去结果的百分比值1-6和9-10.
下面的查询与我从所有研究中获得的查询一样接近,但是我不知道如何仅获得1-6的百分比,而不是全部,以及如何获得第二个查询以减去1-6和9-10个评分百分比.
SELECT rating,
COUNT(*) AS Count,
(COUNT(*) / _total ) * 100 AS Percentege
FROM info,
(SELECT COUNT(*) AS _total FROM info) AS myTotal
GROUP BY rating
解决方法:
select if(rating between 1 and 6, '1-6',
if( rating between 7 and 8, '7-8',
'9-10' )
) as rating_range,
count(1) as num
from info
group by rating_range
编辑:添加舍入和计算
可以用作子查询.给定分组依据,您需要单独获取总金额:
select Q.rating_range,
Q.num,
round(Q.num * 100 / Q.total, 2) as percent
from (
select R.*,
(select count(1) from info) as total
from (
select if(rating between 1 and 6, '1-6',
if( rating between 7 and 8, '7-8',
'9-10' )
) as rating_range,
count(1) as num
from info
group by rating_range ) R
) Q
group by Q.rating_range
就相对价值而言,如果我有一个,我可能会在外部应用程序中做到这一点.否则,您可以执行我想进行的特定查询:
select Q.rating_range,
Q.num,
round(Q.num * 100 / Q.total, 2) as percent,
round( (Q.num - Q.total_nine_ten) * 100 / Q.total, 2) as diff_from_nine_ten
from (
select R.*,
(select count(1) from info) as total,
(select count(1) from info where rating > 8 ) as total_nine_ten
from (
select if(rating between 1 and 6, '1-6',
if( rating between 7 and 8, '7-8',
'9-10' )
) as rating_range,
count(1) as num
from info
group by rating_range ) R
) Q
group by Q.rating_range
不是很优雅,但是可以用