我在这里提供了所有必需的sql查询。当前,当我运行下面的分组查询时,如果每个fk\u用户的id至少有一种颜色,它将为我提供o/p。
我已经讨论了所有可用的解决方案,但在每个解决方案中只有一个字段作为groupby,我想按顺序对两个字段进行分组。
我想计数(*)为0值为任何用户,如果颜色不适用于该用户。
例如,在下面的查询中,fk\u user\u id(37和75)分别只包含一行白色和黑色。我想要两行以上相同的结果
fk\u user\u id=37,黑色为0和
fk\u user\u id=75,白色为0
创建表查询
CREATE TABLE public.color_value
(
id bigint,
color character varying(15),
fk_user_id bigint
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.color_value
OWNER TO postgres;
插入数据查询
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;
电流输出
先谢谢你。
1条答案
按热度按时间ippsafx71#
您可以先枚举用户和颜色,然后将表与左联接: