and*_*sen 1 postgresql postgresql-9.3
我是 Postgres 的新手,我意识到以前有人问过类似的问题,但是,我正在努力使这个查询工作:
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
Run Code Online (Sandbox Code Playgroud)
对于上下文,我有三个表:
image其中有一个id作为主键keyword它具有id作为主键,keyword它是一个表示关键字的字符串keyword_image_assoc其中有一个id,image_id并且keyword_id它是用来关联图像和关键字规范地。如果我添加p_search.id到GROUP BY子句中,结果不正确 -count总是 1。有没有办法对结果进行分组,以便image_ids 具有匹配关键字的数量?
我正在寻找两列count- 匹配关键字的数量和image_id相应图像的 id。谢谢!
查看有关GROUP BY 的Postgres 文档:
当存在GROUP BY或存在任何聚合函数时,SELECT列表表达式引用未分组的列是无效的,除非在聚合函数内或当未分组的列在功能上依赖于分组的列时,否则会有更多为未分组的列返回一个可能的值。如果分组列(或其子集)是包含未分组列的表的主键,则存在函数依赖性。
据此,如果字段未出现在 GROUP BY 子句中或未使用聚合函数,则您不能在 SELECT 语句中引用该字段。
在您的示例中,您正在引用p_search.id但它没有出现在 GROUP BY 子句中。你可以尝试改变它kia.image_id
| 归档时间: |
|
| 查看次数: |
23423 次 |
| 最近记录: |