我的数据是名为sales
的父表和名为sale_lines
的子表。我想从sales
表sale.customer_id=X
或SUM(sale_lines.total)>=Y
中选择所有记录。
customer_id
条件将放在WHERE
子句中,并且SUM(sale_lines.total)>Y
子句中包含HAVING
是有意义的。我的问题是如何在OR
和WHERE
子句之间使用逻辑HAVING
。这可能吗?如果是这样,怎么样?
我知道如何使用子查询执行此操作,但我正在尝试开发自动查询生成解决方案,并且我希望避免处理子查询的复杂性。
答案 0 :(得分:1)
您需要在having
子句中执行此操作:
select . . .
from . . .
group by s.customer_id, . . .
having s.customer_id = X or sum(s.total) > Y;
查询可能如下所示:
select s.customer_id, sum(s.total)
from sales s
group by s.customer_id
having s.customer_id = X or sum(s.total) > Y;
由于or
,您无法在聚合前进行过滤。
实际上,如果你想要销售表中的记录(而不是聚合),那么这样的东西是合适的:
select s.*
from sales s
where s.customer_id = X or
s.customer_id in (select s2.customer_id
from sales s2
group by s2.customer_id
having sum(s2.total) > Y
);