yas
yas

Reputation: 67

Mysql SUM with case statement and multiple conditions

SUM( CASE WHEN items.items_status != 2 THEN items.items_amount 
ELSE 0
END) as ItemsAmount
FROM orders 
LEFT JOIN items ON orders.orders_id = items.orders_id
WHERE orders.orders_status = 1 
group by orders.orders_id 


I get the following:


|     orders_id       |    orders_amount |    orders_status  |     ItemsAmount  |
|---------------------|------------------|------------------ |------------------|
|          1          |         10500    |     1             |      10500       |
|          2          |         2500     |     1             |      1300        |

I would like to exclude orders when orders_amount = ItemsAmount . So i have to add another conditions and the first line should be excluded

My two table are ( orders and items ).

table: items

Item_id orders_id items_amount items_staus
1 1 10500 1
2 2 100 1
3 2 1200 1
4 2 200 2
5 3 5000 1

Table : orders

orders_id orders_status orders_amount
1 1 10500
2 2 2500
3 2 7000

Upvotes: 0

Views: 1084

Answers (2)

ysth
ysth

Reputation: 98388

Easiest way to do this is just add:

having orders_amount <> ItemsAmount

after the group by.

Upvotes: 0

ggordon
ggordon

Reputation: 10035

You may try applying this filter using having clause eg

SUM( CASE WHEN items.items_status != 2 THEN items.items_amount 
ELSE 0
END) as ItemsAmount
FROM orders 
LEFT JOIN items ON orders.orders_id = items.orders_id
WHERE orders.orders_status = 1 
group by orders.orders_id 

HAVING SUM( CASE WHEN items.items_status != 2 THEN items.items_amount 
ELSE 0
END) != orders_amount

Upvotes: 1

Related Questions