2012-10-11 64 views
0

我有一個簡單的表(ID,Member_ID,付款,日期,payment_serial,running_total);我需要payment_serial來使用數據導出到另一個系統。當我使用GROUP BY時,爲什麼我的MySQL結果不正確?

我需要的出口是由會員付款的所有付款(顯示付款&日期),按付款順序排列,並排成一行。

這是我使用的第一個查詢:

SELECT 
    `Member_ID`, 
    IF(`payment_serial`=1,`payment`,0) AS `p1`, 
    IF(`payment_serial`=1,`date`,0) AS `p1_date`, 
    IF(`payment_serial`=1,`ID`,0) AS `p1_ID`, 
    IF(`payment_serial`=2,`payment`,0) AS `p2`, 
    IF(`payment_serial`=2,`date`,0) AS `p2_date` 
    IF(`payment_serial`=2,`ID`,0) AS `p2_ID`, 
FROM monthlies 
WHERE `Member_ID` = 4198739 

如果我使用此查詢,我看到我需要的款項,但每一個單獨的行(這在下一階段產生大的進口問題):

Member_ID p1  p1_date p1_ID p2 p2_date p2_ID ... 
    4198739 34.50 41143 214  0  0  0 ... 
    4198739  0  0  0  34.50 41176 583 ... 

我加GROUP BY:

SELECT 
    IF(`payment_serial`=1,`payment`,0) AS `p1`, 
    IF(`payment_serial`=1,`date`,0) AS `p1_date`, 
    IF(`payment_serial`=1,`ID`,0) AS `p1_ID`, 
    IF(`payment_serial`=2,`payment`,0) AS `p2`, 
    IF(`payment_serial`=2,`date`,0) AS `p2_date`, 
    IF(`payment_serial`=2,`ID`,0) AS `p2_ID` 
FROM monthlies 
WHERE `Member_ID` = 4198739 
GROUP BY `Member_ID` 

這讓我對每個成員的單個行 - 但每次付款:

Member_ID p1  p1_date p1_ID p2 p2_date p2_ID ... 
    4198739 34.50 41143 214  0  0  0 ... 

我要去哪裏錯了?

回答

2

這不完全是你的錯。 MySQL實現了GROUP BY錯誤。任何其他SQL平臺在這一點上都會給你一個語法錯誤。

嘗試

SELECT 
    MAX(IF(`payment_serial`=1,`payment`,0)) AS `p1`, 
    MAX(IF(`payment_serial`=1,`date`,0)) AS `p1_date`, 
    MAX(IF(`payment_serial`=1,`ID`,0)) AS `p1_ID`, 
    MAX(IF(`payment_serial`=2,`payment`,0)) AS `p2`, 
    MAX(IF(`payment_serial`=2,`date`,0)) AS `p2_date`, 
    MAX(IF(`payment_serial`=2,`ID`,0)) AS `p2_ID` 
FROM monthlies 
WHERE `Member_ID` = 4198739 
GROUP BY `Member_ID` 
+0

你爲什麼說MYSQL實現了錯誤的GROUP BY?參考?請不要比較SQL平臺。 –

+2

@Leandro因爲它。 http://www.youdidwhatwithtsql.com/mysql-group-by/1471 – podiluska

+0

良好的聯繫,但又是什麼? T-SQL?什麼是參考?我認爲MySQL只是另一個角度來看待這麼多事情,一些好的,一些壞的,這取決於你如何工作。我不認爲這是一個客觀的錯誤。無論如何感謝您的參考,+1點 –

0

本集團是先於SELECT的IF。

2

您期待GROUP_BY的錯誤輸出。在MySQL GROUP_BY與命令如MAX, AVG, SUM等結合使用,以獲得統一行中的所有結果。

所以,如果你想要導出數據,最好的辦法是不使用group by來獲取所有的行,因爲它會保留每一行的唯一成員id。

+0

Thanks @shubhanshu - GROUP BY和MAX等之間的鏈接已經通過了我。 – hnmcc

+0

+1 –

相關問題