删除查询中的零金额

Remove zero amount in a query

我有一个 table 包含以下列和数据的 finalData

| Code | Country   | City      | Area | Amount    | Date       |
| 4000 | Singapore | Singapore | 1    | 150000.00 | 2020-11-30 |
| 4004 | Singapore | Singapore | 1    | 355000.00 | 2020-11-30 |
| 4005 | Singapore | Singapore | 2    | 0.00      | 2020-11-30 |
| 5001 | Singapore | Singapore | 1    | 13600.00  | 2020-11-30 |

我正在创建 mysql 查询以显示新加坡每个地区的收入和支出,但我必须排除金额为零的地区。这是我试过的代码:

Select fd.Area as area, 
FORMAT((Select IFNULL(SUM(Amount),0) from finalData Where Code LIKE '4%' AND fd.City=finalData.City AND finalData.Area=fd.Area),2) as Revenue,
FORMAT((Select IFNULL(SUM(Amount),0) from finalData Where Code LIKE '5%' AND fd.City=finalData.City AND fd.Area=finalData.Area),2) as Expense
from finalData fd WHERE fd.Date BETWEEN '2020-11-30' AND '2020-11-30' AND fd.City='Singapore' AND fd.Amount <>0 GROUP BY fd.Area

输出应该是这样的

| Area  | Revenue    | Expense   | 
| 1     | 505,000.00 | 13,600.00 |

如有任何帮助,我们将不胜感激。 谢谢

这个逻辑用条件聚合来表述会更简单。至于过滤掉 0 金额,我推测您只想要一个 where 子句:

select area,
    sum(case when code like '4%' then amount else 0 end) as revenue,
    sum(case when code like '5%' then amount else 0 end) as expense
from finaldata fd 
where fd.city = 'Singapore' and amount <> 0 
group by area

另一方面,如果您想过滤两个金额中的一个,则可以使用 having 子句。假设您要过滤掉 0 收入,而不考虑费用,则可以在代码末尾添加以下表达式:

having revenue <> 0