我对我的问题一无所知。我有2个表,如:range(pk,min,max)和user(名称,值),I' ll内连接和分组依次:对于每个范围,每个用户,值的总和(即使在那里)没有结果)。喜欢:
range name value
0-10 test 2
0-10 test2 8
0-10 test3 3
0-10 test4 7
0-20 test 0 ====> actualy, i don't get this line
0-20 test2 8
0-20 test3 3
0-20 test4 7
其实我的查询是:
select cast(range.min AS CHARACTER VARYING) || '-' || cast(range.max AS CHARACTER VARYING)
,user.NAME
,count(*)
FROM range
INNER JOIN user ON user.value >= range.min
AND user.value <= range.max
GROUP BY range.pk
,user.NAME
ORDER BY range.pk;
有没有人有想法在没有结果时插入0?
编辑:我的范围永远不会为NULL,我只会在他不在范围内时添加用户名。
答案 0 :(得分:1)
这有点令人困惑,因为有一个名为user
的表,名称重复。所以要么这不是用户表(每个用户有一条记录),要么我们对这里的用户不感兴趣,而是用户名(多个用户可以有相同的名字)。
无论如何:当用户与范围不匹配时,您希望计数为零。这意味着您希望将所有用户与所有范围合并,然后进行计数。使用交叉连接执行此操作。
select
r.min || '-' || r.max as value_range,
u.name as user_name,
(
select count(*)
from users u2
where u2.name = u.name
and u2.value between r.min and r.max
) as user_range_count
from range r
cross join (select distinct name from user) u
order by r.min, r.max, u.name;