爲什麼總結多列 - 意外的結果
這是不是給出不正確的結果?
SELECT
people.name,
SUM(allorders.TOTAL),
SUM(allorders.DISCOUNT),
SUM(allorders.SERVICECHARGE),
SUM(payments.AMOUNT)
FROM
people
INNER JOIN
allorders ON allorders.CUSTOMER = people.ID
INNER JOIN
payments ON payments.CUSTOMER = people.ID
WHERE
people.ID = 7 AND allorders.VOIDED = 0 AND payments.VOIDED = 0
得到:(名),1644000,1100000,50000,1485000
如果我做兩個表在時間(INNER JOIN人allorders.CUSTOMER = people.ID)在單獨的查詢,我得到了正確的結果。我甚至不知道我得到的數字來自哪裏。像:
SELECT
people.name,
SUM(allorders.TOTAL),
SUM(allorders.DISCOUNT),
SUM(allorders.SERVICECHARGE)
FROM
people
INNER JOIN
allorders ON allorders.CUSTOMER = people.ID
WHERE people.ID = 7 AND allorders.VOIDED = 0
得到:(名),822000,550000 25000
SELECT
people.name,
SUM(payments.AMOUNT)
FROM
people
INNER JOIN payments ON payments.CUSTOMER = people.ID
WHERE people.ID = 7 AND payments.VOIDED = 0
得到:(名),297000
它看起來就像雙打,但我不」不知道爲什麼。
奇怪的是我有一個類似的查詢,正確地做到了這一點。我會發布它,但它有點複雜。這裏是:
SELECT
t1.IDENTIFIER,
ifnull(t1.NAME,""),
t1.PRICE,
t1.GUESTS,
t1.STATUS,
ifnull(t1.NOTE,""),
t1.LINK,
ifnull(t1.EDITOR,""),
concat(t2.FIRSTNAME,"",t2.LASTNAME),
t2.ID,
t3.ID,
ifnull(t1.EMAIL,""),
ifnull(t3.PHONE,""),
ifnull(SUM(p1.AMOUNT),0),
ifnull(SUM(o1.DISCOUNT),0),
ifnull(SUM(o1.TOTAL),0),
ifnull(SUM(o1.SERVICECHARGE),0)
FROM
tables t1
INNER JOIN
people t2 ON t1.SELLER = t2.ID
INNER JOIN
people t3 ON t1.CUSTOMER = t3.ID
INNER JOIN
orderpaymentinfo ON orderpaymentinfo.TABLEID = t1.IDENTIFIER
INNER JOIN
payments p1 ON orderpaymentinfo.PAYMENTID = p1.PAYMENTID
INNER JOIN
allorders o1 ON o1.ORDERID = orderpaymentinfo.ORDERID
WHERE
p1.VOIDED = 0 AND o1.VOIDED = 0 AND t1.DATE = "2014-12-20"
GROUP BY t1.IDENTIFIER
後者聲明做同樣的連接,只是它使用一個額外的輔助表。我很抱歉它格式有點不好(我對SO的格式化程序不太瞭解),但是如果有人能告訴我這兩個語句中的邏輯與另一個語句中的完全錯誤之間的區別,我會非常高興。
響應回答:
結果1:
Name - 5
結果2:
Name - 2
結果3:
Name - 10
結果4是在phpMyAdmin截斷 - 我會在哪裏得到這很容易?
三個表格的表格結構如下所示:
SHOW正在創建中。
好吧,很明顯,你在這裏發生了一些意想不到的多對多關係,你需要找出不清楚的地方。我會稍後發佈一個更長的答案作爲答案,即使答案本身將取決於您需要嘗試的某些查詢...一刻 – evanv
感謝無論誰格式化我的問題。 是否因爲我在最後一個查詢中使用了兩個表(t2和t3),它起作用了嗎? – nickdnk
nickdnk這個問題與人們訂單和人員支付之間的一對多關係有關,您可能需要確定什麼支付意味着加入的順序以減少總和上的人爲膨脹。或者,您可能需要分別對每一個進行求和,然後添加結果。發生什麼事是一個笛卡兒正在發生,你不期望。消除聚合並查看特定用戶,如果您真正瞭解數據和連接,就會發現問題。 – xQbert