Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当fk_user_id的任何行中都不存在Group by value时,如何将0作为计数(字段)中的值_Sql_Postgresql_Database Administration - Fatal编程技术网

Sql 当fk_user_id的任何行中都不存在Group by value时,如何将0作为计数(字段)中的值

Sql 当fk_user_id的任何行中都不存在Group by value时,如何将0作为计数(字段)中的值,sql,postgresql,database-administration,Sql,Postgresql,Database Administration,我在这里提供了所有必需的sql查询。当前,当我在“分组查询”下面运行时,如果每个fk_用户id至少有一种颜色,它会为我提供O/P 我已经讨论了所有关于堆栈溢出的可用解决方案,但在每个解决方案中只有一个字段作为group by,我想按顺序对两个字段进行分组 如果任何用户的颜色不可用,我希望将(*)计数为0 例如,在下面的查询中,fk_user_id(37和75)仅包含一行白色和黑色。我希望得到与 fk_user_id=37,黑色为0,并 fk_user_id=75,白色为0 创建表查询 插入数据查

我在这里提供了所有必需的sql查询。当前,当我在“分组查询”下面运行时,如果每个fk_用户id至少有一种颜色,它会为我提供O/P

我已经讨论了所有关于堆栈溢出的可用解决方案,但在每个解决方案中只有一个字段作为group by,我想按顺序对两个字段进行分组

如果任何用户的颜色不可用,我希望将(*)计数为0

例如,在下面的查询中,fk_user_id(37和75)仅包含一行白色和黑色。我希望得到与

fk_user_id=37,黑色为0,并

fk_user_id=75,白色为0

创建表查询 插入数据查询 选择带有分组依据的查询 电流输出


提前谢谢。

您可以先枚举用户和颜色,然后使用左连接将表带到:

select count(cv.color) AS vote, u.fk_user_id, c.color 
from (select distinct color from color_value) c
cross join (select distinct fk_user_id from color_value) u
left join color_value cv on cv.fk_user_id = u.fk_user_id and cv.color = c.color
group by u.fk_user_id, c.color 
order by u.fk_user_id, c.color;
INSERT INTO public.color_value(id, color, fk_user_id)
    VALUES
(1, 'Black', 15), (2, 'White', 27), (3, 'White', 54), (4, 'Black', 75), (5, 'Black', 27), (6, 'Black', 97), (7, 'White', 37), 
(8, 'Black', 58), (9, 'White', 15), (10, 'Black', 54), (11, 'White', 97), (12, 'White', 58), (13, 'White', 54), (14, 'Black', 75),
(15, 'Black', 27), (16, 'Black', 97), (17, 'White', 37), (18, 'Black', 58), (19, 'Black', 15), (20, 'White', 27), (21, 'White', 54),
(22, 'Black', 75), (23, 'Black', 27), (24, 'Black', 97), (25, 'White', 37), (26, 'Black', 58), (27, 'White', 15), (28, 'White', 37),
(29, 'Black', 58), (30, 'White', 15), (31, 'Black', 54), (32, 'White', 97), (33, 'White', 58), (34, 'White', 54), (35, 'Black', 75);
select count(*) AS vote, color, fk_user_id 
from color_value 
group by fk_user_id, color 
order by fk_user_id, color;
select count(cv.color) AS vote, u.fk_user_id, c.color 
from (select distinct color from color_value) c
cross join (select distinct fk_user_id from color_value) u
left join color_value cv on cv.fk_user_id = u.fk_user_id and cv.color = c.color
group by u.fk_user_id, c.color 
order by u.fk_user_id, c.color;