2013-01-10 163 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