MySql 调查不同查询
MySql survey distinct query
大家好,我真的在为 MySql
查询而苦苦挣扎,我有一个名为 'info' 的 table,其中有一个名为 '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
我不喜欢这个想法本身,但如果你需要你可以:
http://sqlfiddle.com/#!9/bd1c5/1
SELECT rating,
COUNT(*) AS Count,
(COUNT(*) / COALESCE ((SELECT COUNT(*) AS _total FROM info),1) ) * 100 AS Percentege
FROM info
GROUP BY rating
或者如果我们确定 table 不为空:
SELECT rating,
COUNT(*) AS Count,
(COUNT(*) / (SELECT COUNT(*) FROM info) ) * 100 AS Percentege
FROM info
GROUP BY rating
更新 更奇怪但要求的结果:
http://sqlfiddle.com/#!9/4b6bf/4
SELECT
IF(rating>=0 AND rating<=6, '1-6',
IF(rating<=8,'7-8',
IF(rating<=10,'9-10','UNKNOWN')
)
) as pseudo_rating,
COUNT(*) AS Count,
(COUNT(*) / (SELECT COUNT(*) FROM info) ) * 100 AS Percentege
FROM info
GROUP BY pseudo_rating
更新 ROUND()
http://sqlfiddle.com/#!9/4b6bf/6
SELECT
IF(rating>=0 AND rating<=6, '1-6',
IF(rating<=8,'7-8',
IF(rating<=10,'9-10','UNKNOWN')
)
) as pseudo_rating,
COUNT(*) AS Count,
ROUND((COUNT(*) / (SELECT COUNT(*) FROM info) ) * 100, 2) AS Percentege
FROM info
GROUP BY pseudo_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
编辑:添加舍入和计算
这可以用作子查询。给定group by你需要单独获取总金额:
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
不是很优雅,但很管用
大家好,我真的在为 MySql
查询而苦苦挣扎,我有一个名为 'info' 的 table,其中有一个名为 '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
我不喜欢这个想法本身,但如果你需要你可以:
http://sqlfiddle.com/#!9/bd1c5/1
SELECT rating,
COUNT(*) AS Count,
(COUNT(*) / COALESCE ((SELECT COUNT(*) AS _total FROM info),1) ) * 100 AS Percentege
FROM info
GROUP BY rating
或者如果我们确定 table 不为空:
SELECT rating,
COUNT(*) AS Count,
(COUNT(*) / (SELECT COUNT(*) FROM info) ) * 100 AS Percentege
FROM info
GROUP BY rating
更新 更奇怪但要求的结果:
http://sqlfiddle.com/#!9/4b6bf/4
SELECT
IF(rating>=0 AND rating<=6, '1-6',
IF(rating<=8,'7-8',
IF(rating<=10,'9-10','UNKNOWN')
)
) as pseudo_rating,
COUNT(*) AS Count,
(COUNT(*) / (SELECT COUNT(*) FROM info) ) * 100 AS Percentege
FROM info
GROUP BY pseudo_rating
更新 ROUND()
http://sqlfiddle.com/#!9/4b6bf/6
SELECT
IF(rating>=0 AND rating<=6, '1-6',
IF(rating<=8,'7-8',
IF(rating<=10,'9-10','UNKNOWN')
)
) as pseudo_rating,
COUNT(*) AS Count,
ROUND((COUNT(*) / (SELECT COUNT(*) FROM info) ) * 100, 2) AS Percentege
FROM info
GROUP BY pseudo_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
编辑:添加舍入和计算 这可以用作子查询。给定group by你需要单独获取总金额:
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
不是很优雅,但很管用