2013-01-10 46 views
3

我有一个使用sum函数的问题。所以基本上,我有2个表,paiment_type票据。 在账单表中,我有一个外键名称fk_paiement_type这让我知道什么样的paiement用于这个特定的账单。MySQL默认返回0默认

打印时的统计数据,我这样做是为了得到总的paiement类型:

SELECT 
    pt.name, 
    SUM(f.total_ttc) AS total_mode 
FROM 
    bills AS f 
    INNER JOIN paiement_type AS pt 
    ON pt.id = f.fk_paiement_type 
WHERE (
    f.created BETWEEN '2013-01-10' 
    AND '2013-01-10' 
) 
    AND (
    f.type LIKE 'facture' 
    OR f.type LIKE '' 
) 
GROUP BY f.fk_paiement_type 

此代码的工作很好,但我反倒3型动物paiement类型,有时只是其中2例在使用如果它不存在,我仍然想要显示它。

编辑:我已经尝试使用IFNULL功能,但它没有奏效。账单表中的fk_paiement_type有时只返回2个匹配paiement_type表的值。我认为我的问题来自这里:

INNER JOIN paiement_type AS pt ON pt.id = f.fk_paiement_type 

任何想法?

EDIT2:

我的表结构如下:

**Bills Table** 

id (int), 
fk_paiement_type (int), 
ref (varchar), 
fk_client (int), 
tss (double), 
total_ttc (double), 
type (varchar), 
created (datetime) 

**Paiement_type Table** 

id (int), 
name (varchar) 

我想你的最终答案,但它仍然没有奏效。现在,我只是绕过我的Java代码中的这个问题,但我希望有一个“干净”的方式来做到这一点。

非常感谢您的帮助

回答

6

这是使用IFNULL

SELECT 
    pt.name, 
    IFNULL(SUM(f.total_ttc),0) AS total_mode 
FROM 
    factures AS f 
    INNER JOIN paiement_type AS pt 
    ON pt.id = f.fk_paiement_type 
WHERE (
    f.created BETWEEN '2013-01-10' 
    AND '2013-01-10' 
) 
    AND (
    f.type LIKE 'facture' 
    OR f.type LIKE '' 
) 
GROUP BY f.fk_paiement_type 

编辑:

SELECT 
    pt.name, 
    SUM(f.total_ttc) AS total_mode 
FROM 
    bills AS f 
INNER JOIN (SELECT * FROM paiement_type GROUP BY fk_paiement_type) AS pt ON pt.id = f.fk_paiement_type 
WHERE (f.created BETWEEN '2013-01-10' AND '2013-01-10') AND (f.type LIKE 'facture' OR f.type LIKE '') 
GROUP BY f.fk_paiement_type 

我想多个结果,当您使用内部联接,从而限制内加盟加入每组只能获取1条记录

+0

嗨,谢谢你的回答。我一直在尝试IFNULL功能,但它仍然不起作用。也许我错过了我的桌子结构?因为fk_paiement_type只返回2个paiements类型。如何更改查询以获得每个paiement类型的总数? – lkartono

+0

很难预测,除非你发布了表结构和输出数据 –

+0

INNER JOIN?当然你想要一个左外部连接!?! – Strawberry

0

试试这个

SELECT 
    f.thename, 
    f.total_mode 
    FROM (SELECT name as thename , SUM(total_ttc) AS total_mode from bills 
      WHERE (
      f.created BETWEEN '2013-01-10' 
      AND '2013-01-10' 
     ) 
      AND (
       f.type LIKE 'facture' 
      OR f.type LIKE '' 
       ) GROUP BY fk_paiement_type ) f 
    INNER JOIN paiement_type AS pt 
    ON pt.id = f.fk_paiement_type 
+0

嗨,我试过了,但它仍然无法正常工作。 。我更新了我的表格(EDIT2)与我的表结构,也许它可以帮助...谢谢 – lkartono

+0

编辑我的答案 –

+0

嗨,我得到了这个错误:#1054 - 未知的列'f.fk_paiement_type''on子句' – lkartono