2017-09-09 8 views
0

私のデータは、salesという名前の親テーブルと、sale_linesという名前の子テーブルです。 sale.customer_id=X OR SUM(sale_lines.total)>=Ysalesテーブルからすべてのレコードを選択したいと思います。クエリの作成方法WHERE X OR HAVING Y

customer_id条件はWHERE句に行くと、それはHAVING句でSUM(sale_lines.total)>Yを持っていることは理にかなっています。私の問題は、WHEREHAVINGの間に論理ORを持つ方法です。これは可能ですか?もしそうなら、どうですか?

私はサブクエリでこれを行う方法を知っていますが、私は自動化されたクエリ生成ソリューションを開発しようとしており、サブクエリを扱うのは複雑ではありません。

答えて

1

あなたはhaving句でこれを実行する必要があります。

select . . . 
from . . . 
group by s.customer_id, . . . 
having s.customer_id = X or sum(s.total) > Y; 

クエリは次のようになります。そのためor

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; 

、あなたは、集約前にフィルタリングすることはできません。あなたが売上テーブルからレコード(とない集計を)したい場合

は実際には、このようなものが適当である:

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 
         ); 
関連する問題