Eu sou um novato quando se trata de Postgres e percebo que perguntas semelhantes foram feitas antes, no entanto, estou lutando para fazer essa consulta funcionar:
SELECT p_search.id, count(kia.image_id) AS count
FROM (SELECT id,
keyword,
to_tsvector('english',keyword) AS tskw
FROM keyword) AS p_search
LEFT JOIN keyword_image_assoc AS kia
ON kia.keyword_id = p_search.id
WHERE p_search.tskw @@ plainto_tsquery('english','resident life')
OR p_search.tskw @@ plainto_tsquery('english','wofford')
GROUP BY kia.image_id
ORDER BY count desc
Para contextualizar, tenho três tabelas:
image
que tem umid
como chave primáriakeyword
que temid
como chave primária ekeyword
que é uma string representando uma palavra-chavekeyword_image_assoc
que tem umid
,image_id
ekeyword_id
que é usado para associar imagens e palavras-chave canonicamente.
Se eu adicionar p_search.id
à GROUP BY
cláusula, os resultados não estão corretos - count
é sempre 1. Existe uma maneira de agrupar os resultados para que os image_id
s tenham a contagem do número de palavras-chave correspondentes?
Estou procurando duas colunas count
- o número de palavras-chave correspondentes e image_id
o id da imagem correspondente. Obrigado!
Dê uma olhada nos documentos do Postgres sobre GROUP BY :
De acordo com isso, você não pode referenciar um campo na instrução SELECT se ele não aparecer na cláusula GROUP BY ou sem usar uma função agregada.
No seu exemplo, você está referenciando
p_search.id
, mas não aparece na cláusula GROUP BY. Você poderia tentar mudá-lo porkia.image_id