簡體   English   中英

如何從多表條件和查詢中僅選擇非零值

[英]How to select only non-zero values from multiple table conditional sum query

我很難消除特定表達式中具有零值的行,這里的任何幫助都非常有用

這是我的兩個簡單桌子

create table tbl1
(id int, account varchar(50), stock varchar(50), price int, vol int);

insert into tbl1 values
(1, 'a1', 's1', 10, 5),
(2, 'a1', 's2', 5, 5),
(3, 'a2', 's1', 15, 3),
(4, 'a2', 's2', 20, 2),
(5, 'a2', 's2', 20, 2);

create table tbl2
(id int, tid int, price int, vol int);

insert into tbl2 values
(1, 1, 5, 3),
(2, 1, 5, 1),
(3, 1, 15, 1),
(4, 2, 5, 3),
(5, 2, 6, 2);

我的選擇如下,它給了我所需的東西,但也給了我其中的行
(t1.vol - ifnull(Sum(t2.vol), 0))返回零

select 
t1.id,account,stock,
(t1.vol - ifnull(Sum(t2.vol), 0)) vol
from tbl1 t1 
left join tbl2 t2 on t1.id=t2.tid
group by t1.id

有人可以幫我擺脫這些零值嗎?

我嘗試過having (t1.vol - ifnull(Sum(t2.vol), 0)) <> 0 ==>它說vol是無效列
我嘗試where (t1.vol - ifnull(Sum(t2.vol), 0)) <> 0 ==>它表示無效使用組函數

這是我上面查詢得到的輸出

ID  ACCOUNT STOCK   VOL
1   a1      s1      0
2   a1      s2      0
3   a2      s1      3
4   a2      s2      2
5   a2      s2      2


解:

select 
t1.id,account,stock,
(t1.vol - ifnull(Sum(t2.vol), 0)) vol
from tbl1 t1 
left join tbl2 t2 on t1.id=t2.tid
group by t1.id
having vol <> 0

您可以如下修改查詢

select t1.id,
t1.account,
t1.stock,
(t1.vol - coalesce(tab.vol_total,0)) as vol
from tbl1 t1 
left join 
(
select tid,Sum(vol) as vol_total
from tbl2 
group by tid
) tab
on t1.id=tab.tid
where (t1.vol - coalesce(tab.vol_total,0)) > 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM