mysql - Why doesn't my query return any rows -
structure table show here
if use query:
select idn balans outerb idn!='' group idn order ifnull((select sum(innerb.amount) balans innerb innerb.idn = outerb.idn , status='up'), 0) - ifnull((select sum(innerb.amount) balans innerb innerb.idn = outerb.idn , status='down'), 0) desc limit 15
i 2 rows.
but if add condition >0
:
select idn balans outerb idn!='' , ( (select sum(innerb.amount) balans innerb innerb.idn = outerb.idn , type='up') - (select sum(innerb.amount) balans innerb innerb.idn = outerb.idn , type='down') ) > 0 group idn order ifnull((select sum(innerb.amount) balans innerb innerb.idn = outerb.idn , type='up'), 0) - ifnull((select sum(innerb.amount) balans innerb innerb.idn = outerb.idn , type='down'), 0) desc limit 15
in result 0 rows...
tell me please error? why getting 0 rows?
you didn't include ifnull()
in where
condition. reason getting 0 rows instead of 2. sums, returned subqueries, null
(that's sum()
returns when there no matching row, despite 1 might think 0
more logical, returns null
.)
and added condition, i'd put in having
clause, not where
(doesn't make difference results in case may more efficient):
select idn balans outerb idn !='' group idn having ifnull((select sum(innerb.amount) balans innerb innerb.idn = outerb.idn , type='up'), 0) - ifnull((select sum(innerb.amount) balans innerb innerb.idn = outerb.idn , type='down'), 0) > 0 order ifnull((select sum(innerb.amount) balans innerb innerb.idn = outerb.idn , type='up'), 0) - ifnull((select sum(innerb.amount) balans innerb innerb.idn = outerb.idn , type='down'), 0) desc limit 15 ;
i don't see reason write query correlated subqueries. can use derived tables , simple joins (also corrected type
status
):
select di.idn ( select idn balans group idn having idn > '' ) di left join ( select idn, sum(amount) balans status = 'up' group idn ) bu on bu.idn = di.idn left join ( select idn, sum(amount) down balans status = 'down' group idn ) bd on bd.idn = di.idn coalesce(bu.up, 0) - coalesce(bd.down, 0) > 0 ;
test @ sql-fiddle
Comments
Post a Comment