我发现很难找到合适的标题。为简单起见,假设我有下表:
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
现在我想得到一个“好”厨师的输出。一个好的厨师是指至少有 70% 的评分为 1、2 或 3,但不是 4 或 5。
所以在我的示例表中,id 为 1 的厨师共有 10 个评分,其中 7 个具有类型 1、2 和 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% 的要求。