mySQL COALESCE过滤

时间:2015-07-20 22:42:52

标签: mysql sql coalesce

你好伙伴Stackoverflowers!我有一个我正在研究的查询,我需要过滤0,但它不会删除那些记录,我似乎无法找出原因。

请参阅下文,

SELECT  disb_sum, pl_balance,
      COALESCE(p.pl_balance - pd.disb_sum, p.pl_balance - 0) AS pledge_balance
FROM      contacts c
LEFT JOIN pledges p ON c.c_no = p.c_no
LEFT JOIN (
        SELECT   pl_no, disb_status, disb_no, disb_amount, SUM(disb_amount) AS disb_sum
        FROM     disbursements
        WHERE disb_status = 1
        GROUP BY pl_no
        ) pd ON p.pl_no = pd.pl_no
GROUP BY p.pl_no
HAVING pledge_balance > "0"
ORDER BY  c.c_last

输出

# disb_sum, pl_balance, pledge_balance
NULL, '5000.00', '5000.00'
NULL, '5000.00', '5000.00'
'25000.00', '25000.00', '0.00'
NULL, '100000.00', '100000.00'
NULL, '6000.00', '6000.00'
NULL, '2500.00', '2500.00'
NULL, '1500.00', '1500.00'

我已尝试添加其他参数和disb_sum<> disb_sum但得到相同的结果集。

4 个答案:

答案 0 :(得分:0)

GROUP BY p.pl_no    
HAVING pledge_balance > "0"

试试这个:

WHERE pledge_balance > "0"
GROUP BY p.pl_no

我无法理解您为什么要按该列进行分组,因为它无论如何都不是结果集列。

答案 1 :(得分:0)

如果Niloct的答案不起作用,请尝试:

db.website.com

答案 2 :(得分:0)

我的猜测是pledge_balance 大于零。但是,它类似于0.0001。如果使用浮点数而不是定点数,这尤其可行。

所以,你可以尝试:

HAVING pledge_balance > 0.005

答案 3 :(得分:0)

我无法弄清楚我的参数有什么问题,所以我将查询加载到临时表中并以这种方式过滤。谢谢你们的及时反馈和帮助!