我发现很难找到合适的标题。为了简单起见,让我们说我有下面的表格:比较行并获得百分比
cook_id cook_rating
1 2
1 1
1 3
1 4
1 2
1 2
1 1
1 3
1 5
1 4
2 5
2 2
现在我想得到'好'厨师的输出。一个好厨师的评级至少为1,2或3,但不是4或5的至少70%。
所以在我的示例表中,ID为1的厨师总共有10个评级,7其中1型,2型和3型。只有3种具有4型或5型。因此,具有ID 1的厨师将是“好”厨师,并且输出应该是具有良好评级数量的厨师ID。
cook_id cook_rating
1 7
然而,id 2的厨师不满足我的条件,因此不应该列出。
select cook_id, count(cook_rating) - sum(case when cook_rating = 4 OR cook_rating = 5 then 1 else 0 end) as numberOfGoodRatings from cook
where cook_rating in (1,2,3,4,5)
group by cook_id
order by numberOfGoodRatings desc
不过,这并没有考虑到一个事实,即有可能是更多的4或5比不错的收视率,导致负输出。此外,至少70%的要求不包括在内。
我相信你会对[本文]的解决方案感兴趣(http://evanmiller.org/how-not-to-sort-by-average-rating.html)。 – 2012-07-08 16:27:16
不错的文章,但对我的需求太复杂。在我的情况下,我只想对有用的评分进行排序,如果这个人的评分超过70%。因此,拥有10个好评和0个差等级的人,与1000个好评等级的人相比,价值仍然“低得多”,但有300个为负值,即使这不是对某人进行评级的好方法。 – 2012-07-08 16:37:01