При объединении 4 таблиц с условиями я получил результаты 3 раза - PullRequest
0 голосов
/ 02 июля 2018

у меня 4 стола

слово

raw_value
b
t
page_id

страница

id
metadata
document_id

документ

id
error_status

время

user_name
to
document_id

Итак, вот мои четыре таблицы, и я хочу выбрать идентификатор, raw_value и нижний (raw_value), но при некоторых условиях вот мой sql запрос:

SELECT  p.id, 
array_agg(w.raw_value) as words_top ,
array_agg(lower(w.raw_value)) as words_top_lowercase
FROM word w
LEFT OUTER JOIN page p
       ON w.page_id = p.id
       AND ((w.b+w.t)/cast(p.metadata->>'height' as float) < 0.33)
LEFT OUTER JOIN document d
       ON p.document_id = d.id
       AND d.error_status not in ('REVIEW_REQUESTED', 'TO_VALIDATE', 'TO_CORRECT', 'NO_INVOICE')
LEFT OUTER JOIN timing t
       ON d.id = t.document_id
       AND t.user_name IN ('Richard Andrian', 'Adrien Rajon', 'Francine Rak')
       AND t.t0 > '2018-06-15'
group by p.id;

Я заметил, что результаты умножаются на 3, например, когда я пытаюсь посмотреть на "words_top", я получил это:

 ['Gare', 'Gare', 'Gare', 'La', 'La', 'La', 'Fabrication',
 'Fabrication', 'Fabrication', 'Dépôt', 'Dépôt', 'Dépôt', 'ra', 'ra',
 'ra', 'at', 'at', 'at', ':', 'Télécopie', 'Télécopie', 'Télécopie',
 '0243686300', '0243686300', '0243686300', 'Téléphone', 'Téléphone',
 'Téléphone', 'LAVAL', 'LAVAL', 'LAVAL', '-53000', '-53000', '-53000',
 'Jaurès', 'Jaurès', 'Jaurès', 'Jean', 'Jean', 'Jean', 'Boulevard',
 'Boulevard', 'Boulevard', '39,', '39,', '39,', 'BRICOLAGE',
 'BRICOLAGE', 'BRICOLAGE', '&', '&', '&', 'MATÉRIAUX', 'MATÉRIAUX',
 'MATÉRIAUX', 'Télécopie', 'Télécopie', 'Télécopie', '0299963860',
 '0299963860', '0299963860', ':', ':', ':', ':', 'Téléphone', ':', ':',
 ':', 'Téléphone', 'Téléphone', 'GUERCHE-DE-BRETAGNE',
 'GUERCHE-DE-BRETAGNE', 'GUERCHE-DE-BRETAGNE', 'LA', 'LA', 'LA',
 '-35130', '-35130', '-35130', 'Téléphone', 'Rennes', 'Gedimat',
 'Gedimat', 'Gedimat', '0243060690', '0243060690', '0243060690',
 '0299964442', '0299964442', '0299964442', '0243686301', 'Rennes',
 'de', 'de', 'SOC', 'SOC', 'SOC', 'de', 'Agences', 'Agences',
 'Agences', '0243686301', 'Route', 'Route', 'Route', 'Télécopie',
 'Télécopie', 'Télécopie', '0243091919', '0243091919', '0243091919',
 'Téléphone', 'Téléphone', 'Téléphone', 'CRAON', 'CRAON', 'CRAON',
 '-53400', '-53400', '-53400', 'Pépinière', 'Pépinière', 'Pépinière',
 'La', 'La', 'La', 'ZA', 'ZA', 'ZA', 'Social', 'Social', 'Social',
 'Siège', 'Siège', 'Siège', '0243686301', ':', 'Rennes', '0243091920',
 '0243091920', '0243091920', 'Télécopie', 'Télécopie', 'Télécopie',
 '0243091913', '0243091913', '0243091913', 'S.A.S', 'S.A.S', 'S.A.S',
 'au', 'au', 'au', 'Capital', 'Capital', 'Capital', 'de', 'de', 'de',
 '400768', '400768', '400768', 'E', 'E', 'E', 'Téléphone', 'Téléphone',
 'SELLE-CRAONNAISE', 'SELLE-CRAONNAISE', 'SELLE-CRAONNAISE', 'LA',
 'LA', 'LA', '-53800', '-53800', '-53800']

Не могли бы вы помочь мне решить эту проблему, я пытался использовать DISTINCT внутри array_agg, но это не правильный путь, потому что words_top, например, должен возвращать слово "Téléphone" 4 раза, тогда как отличные возвращают его только один. Запрос, который я здесь использовал, возвращает слово «Téléphone» 12 раз, оно одинаково для всех остальных слов. Это означает, что все результаты умножаются на 3.

Когда я пытаюсь увидеть список top_word для определенного page_id и без добавления в присоединение, у меня получается такой результат:

{:,:,:, Siège, социальные, ZA, La, Pepiniere, -53400, Краоном, Téléphone, 0243091919, Télécopie, маршрут, Agences, де, Rennes, -35130, LA, GUERCHE-DE-BRETAGNE, Téléphone, 0299963860, Télécopie, MATÉRIAUX, и, BRICOLAGE, "39," Бульвар Жан Жорес, -53000, LAVAL, Téléphone, 0243686300, Télécopie, на, ра, Depot, Fabrication, La, Гар, -53800, Л.А. , SELLE-CRAONNAISE, Téléphone, 0243091920, Télécopie, 0243091913, SAS, аи, капитал, де, 400768, E, Gedimat, 0243060690,0299964442,0243686301, SOC}

Я ищу результаты такого рода, а не дублированные.

...