2017-06-12 55 views
-2

我需要构建一个查询,它返回SUM(函数)的order_ID筛选。通过多个wheres SUM()筛选

让我说只有当“笔”,“铅笔”和“橡皮擦”的总和等于或大于15时,我需要过滤下面的数据。换句话说,我需要排除“邮票”和“框架” 。我想我需要GROUP BY ORDER_ID

order_ID |article_ID | QTY | 
---------------------------- 
    1  | pen  | 5 | 
    1  | pencil | 5 | 
    1  | eraser | 5 | 
    1  | stamp  | 3 | 
    1  | frames | 3 | 
    2  | pen  | 3 | 
    2  | pencil | 5 | 
    2  | eraser | 5 | 
    3  | pen  | 5 | 
    3  | pencil | 10 | 

我希望得到的只有ORDER_ID = 1,因为两个2和3是出于我的条件。你能帮我吗?

+0

为什么你会不会得到ORDER_ID 3,因为它有钢笔和铅笔= 15? –

+0

与Tab Alleman相同。这是否意味着每笔“笔”,“铅笔”和“橡皮”都必须有记录? – ZunTzu

回答

1

邮政聚合过滤应该这样做。

SELECT order_id FROM t 
WHERE article_id IN("pen", "pencil", "eraser") 
GROUP BY order_id 
HAVING SUM(QTY)>=15 
0

你可以使用如下条件汇总:

Select order_id from #yourorder group by order_id 
having sum(case when article_id in ('pen','pencil','eraser') then qty else 0 end) >= 15 
0

根据你输入的ORDER_ID 1 & 3将被退回,只有ORDER_ID 1

只有当“笔”,“铅笔”和“橡皮擦”的总和等于或大于 比15

为下一个演示: -

Create table mytable (order_ID int , article_ID varchar(20),QTY int) 
insert into mytable values 
(1,'pen',5), 
(1,'pencil',5), 
(1,'eraser',5), 
(1,'stamp',3), 
(1,'frames',3), 
(2,'pen',3), 
(2,'pencil',5), 
(2,'eraser',5), 
(3,'pen',5), 
(3,'pencil',10) 

select order_ID,sum(QTY) SumQty 
from mytable 
WHERE article_id IN('pen','pencil','eraser') 
group by order_ID 
having sum(QTY) => 15 

输出: -

order_ID SumQty 
    1   15 
    3   15