在我的图像分类软件中有表格result
和image
.
一个结果可以包含许多图像。每个图像可以使用列中的值“P”或负值“N”分类为正image.preclassification
结果,更多的图像是正面的就是正面的。
我只想选择积极的结果。
在阅读了几个小时的 PostgreS 文档后,我想到了这样一个让我害怕的解决方案:
WITH tmp AS (
SELECT result.result_id AS res, image.result_id , Count( image.preclassification ) AS ImgAll,
SUM(
CASE image.preclassification
WHEN 'P' THEN 1
ELSE 0
END
) AS ImgPos
from result, image
WHERE result.result_id = image.result_id
GROUP BY result.result_id, image.result_id
)
SELECT result_id
FROM tmp
WHERE ImgPos > ImgAll/2
我的问题是,对于此类(ihmo 非常常见)问题,是否有更简单的解决方案/方法?
编辑:解释
首先,我创建一个临时表,其中的列包含正图像的计数和结果的所有图像的计数。在下一步中,我只选择行,正图像的数量超过所有图像的一半。我的第一个想法是ImgPos > ImgAll/2
在第一个WHERE
语句中使用而不是使用WITH
-clause。但它不能作为 ImgPos 工作,ImgAll 被报告为未知列。