【发布时间】:2012-06-23 21:27:03
【问题描述】:
我有一个选择语句: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 次。
我不想应用存储过程循环遍历结果或类似的东西。是否可以在不使用存储过程、循环或创建临时表的情况下填补结果中的这些空白?
【问题讨论】: