0

私はこのクエリを持っていて、ほとんどの場合は機能しているようですが、何かを返す必要があることがわかっている場合でも、NULLを取得しています。

私はから始めてselect、それからこれ

(select sum(total) from orders
        where customer = 9
        and iscredit = 1
        and isdeleted = false and not id = 1560)

このコードの平和により、顧客9の注文の合計額が取得され、以前の注文の合計のように現在の注文ではありません...また、iscredit = 1は、これらがクレジット注文であることを意味します。

次に、このクエリを追加します

(select sum(total) from orders
        where customer = 9
        and iscredit = 0
        and isdeleted = false and not id = 1560)

同じことをしますが、iscreditは0なので、クレジットではない注文です。

次に、このクエリで支払われた金額を差し引きたい

- (select ifnull(sum(p.amount), 0) from payment p
        inner join orders o
        on p.order = o.id
        where o.customer = 9) as previous

だから、これは私のクエリがどのように見えるかをまとめて....

select 
(
    select sum(total) 
    from orders
    where customer = 9 and iscredit = 1 and isdeleted = false and not id = 1560
) 
+ 
(
    select sum(total) 
    from orders
    where customer = 9 and iscredit = 0 and isdeleted = false and not id = 1560
) 
- 
(
    select ifnull(sum(p.amount), 0) 
    from payment p
        inner join orders o
            on p.order = o.id
    where o.customer = 9
) as previous 

これを書くためのより良い方法はありますか?

ヒントをいただければ幸いです。

ありがとう

4

1 に答える 1

2

このようなものは、最初の2つの合計をひとまとめにします。

(select sum(total)
from orders
where customer = 0
and (iscredit = 1 or iscredit = 0)
and isdeleted = false
and not id = 1560)

これにより、一致する行がない場合はnullが返されるため、次を追加することをお勧めします。

(select ifnull(sum(total), 0)
from orders
where customer = 0
and (iscredit = 1 or iscredit = 0)
and isdeleted = false
and not id = 1560)

これがおそらくあなたの問題の原因です。

于 2012-04-25T15:11:33.687 に答える