Я предоставил здесь все необходимые sql запросы. В настоящее время, когда я запускаю запрос «Группировать по», он дает мне O / P для каждого fk_user_id, если для этого пользователя присутствует хотя бы 1 цвет.
Я уже просмотрел все доступные решения на Stack Overflow, но в каждом решении есть только 1 поле в виде группы по, и я хочу сгруппировать по 2 поля последовательно.
Я хочу count ( *) как значение 0 для любого пользователя, если Color недоступен для этого пользователя.
Например, в запросе ниже fk_user_id (37 и 75) содержит только 1 строку для белого и черного цветов соответственно. Я хочу получить тот же результат с еще 2 строками, как для
fk_user_id = 37 и цвет черный как 0 голосов и
fk_user_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;
Текущий вывод
Заранее благодарю