如何构建查询WHERE X或HAVING Y.

时间:2017-09-09 14:29:54

标签: mysql sql where having

我的数据是名为sales的父表和名为sale_lines的子表。我想从salessale.customer_id=XSUM(sale_lines.total)>=Y中选择所有记录。

customer_id条件将放在WHERE子句中,并且SUM(sale_lines.total)>Y子句中包含HAVING是有意义的。我的问题是如何在ORWHERE子句之间使用逻辑HAVING。这可能吗?如果是这样,怎么样?

我知道如何使用子查询执行此操作,但我正在尝试开发自动查询生成解决方案,并且我希望避免处理子查询的复杂性。

1 个答案:

答案 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
                       );