我有一个简单的表(ID,Member_ID,付款,日期,payment_serial,running_total);我需要payment_serial来使用数据导出到另一个系统。
我需要的导出是会员支付的所有款项(显示付款和日期),按payment_serial和单行排序。
这是我使用的第一个查询:
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 ...
我哪里错了?
答案 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`
答案 1 :(得分:2)
您期望GROUP_BY输出错误。在MySQL中GROUP_BY
与MAX, AVG, SUM
等命令一起使用,以便在统一行中获得所有结果。
因此,如果要导出数据,最好的方法是在不使用group by的情况下获取所有行,因为它将保留每一行的唯一成员ID。
答案 2 :(得分:0)
GROUP BY位于SELECT的IF之前。