我有一个带有子查询的查询,结果输出为yesterday_sum
列。我只需要筛选其中包含yesterday_sum > 1
的行,但不能添加HAVING sum(p.profit_percent) / :workDays > 1 AND yesterday_sum > 1
,因为yesterday_sum
不是GROUP BY
的一部分。我不能为positions p
添加条件,因为yesterday_sum
不是positions
列。
SELECT u.id AS id,
u.nickname AS title,
sum(p.profit_percent) / :workDays AS middle,
(
SELECT sum(ps.profit_percent)
FROM positions ps
WHERE ps.user_id = u.id
AND ps.open_at BETWEEN
:dateYesterday AND
:dateYesterday + INTERVAL '1 day'
GROUP BY (ps.user_id)
) AS yesterday_sum
FROM positions p
INNER JOIN users u ON u.id = p.user_id
AND p.profit_percent IS NOT NULL
AND p.parent_ticket IS NULL
AND p.close_at IS NOT NULL
AND p.open_at BETWEEN :dateFrom AND :dateTo
GROUP BY (u.id, u.nickname)
HAVING sum(p.profit_percent) / :workDays > 1
ORDER BY middle DESC;
如何删除yesterday_sum
列小于1且为NULL的行?
1条答案
按热度按时间htzpubme1#
要在
WHERE
子句中使用列yesterday_sum
,可以通过将查询作为主查询的子查询来生成命名列。然后,过滤就变得很简单了。例如,您可以: