Это продолжение question. Кажется, я столкнулся с краевым случаем, и я не понимаю, почему я получаю неправильные результаты. Используя данные из связанного вопроса, Я могу сгруппировать их в комбинации, которые используют один и тот же альбом, src и background.
Например, используя эти данные:
CREATE TABLE reports (rep_id int primary key, data json);
INSERT INTO reports (rep_id, data)
VALUES
(1, '{"objects":[{"album": 1, "src":"fooA.png", "pos": "top"}, {"album": 2, "src":"barB.png", "pos": "top"}], "background":"background.png"}'),
(2, '{"objects":[{"album": 1, "src":"fooA.png", "pos": "top"}, {"album": 2, "src":"barC.png", "pos": "top"}], "background":"background.png"}'),
(3, '{"objects":[{"album": 1, "src":"fooA.png", "pos": "middle"},{"album": 2, "src":"barB.png", "pos": "middle"}],"background":"background.png"}'),
(4, '{"objects":[{"album": 1, "src":"fooA.png", "pos": "top"}, {"album": 3, "src":"barB.png", "pos": "top"}], "background":"backgroundA.png"}')
;
и это запрос:
SELECT distinct array_agg(distinct r.rep_id) AS ids, count(*) AS ct
FROM reports r
, json_array_elements(r.data->'objects') o
GROUP BY r.data->>'background'
, o->>'album'
, o->>'src'
ORDER BY count(*) DESC
LIMIT 5;
Я получаю эти результаты, которые неверны:
ids | ct
---------+----
{1,2,3} | 3
{1,3} | 2
{2} | 1
{4} | 1
Я хочу, чтобы это
ids | ct
---------+----
{1,3} | 2
{2} | 1
{4} | 1
Если я изменяю значения background
так, чтобы они менялись, то он работает так, как ожидалось, но подсчеты все еще отключены. Так что я собираюсь, группировка background
может быть причиной этой проблемы. Но я не знаю почему. Я могу обойтись без учета, мне просто нужны идентификаторы, сгруппированные для соответствия комбинациям, которые используют один и тот же файл, альбом и фон.
Edit Мне пришлось изменить свой вопрос. Оказывается, у моих образцов данных была ошибка, и я не получал правильных результатов. Поэтому я ищу запрос, который работает, если это возможно.