我有一个 select 语句:select a, b, [...];
它返回结果:
a|b
---------
1|8688798
2|355744
4|457437
7|27834
我希望它返回:
a|b
---------
1|8688798
2|355744
3|0
4|457437
5|0
6|0
7|27834
一个示例查询不符合我的要求,因为它没有间隙编号:
select
sub.num_of_ratings,
count(sub.rater)
from
(
select
r.rater_id as rater,
count(r.id) as num_of_ratings
from ratings r
group by rater
) as sub
group by num_of_ratings;
查询说明:如果一个用户对另一个用户进行评分,评分列在 rating 表中,评分用户的 id 保存在字段 rater_id 中。实际上,我检查了评分中提到的所有用户,并计算了我为该用户找到了多少评分记录,即rater / num_of_ratings
,然后我使用此结果来查找有多少用户对给定次数进行评分。
最后我知道有多少用户评价过一次,有多少用户评价过两次,等等。我的问题是 count(sub.rater) 的数字从 1,2,3,4,5 开始很好......但是,对于更大的数字有差距。这是因为可能有一位用户评分 1028 次 - 但没有用户评分 1027 次。
我不想应用存储过程循环结果或类似的东西。是否可以在不使用存储过程、循环或创建临时表的情况下填补结果中的这些空白?