我正在从 1 个表进行查询,并使用 UNION
和 2 个具有不同条件的 select
。
SELECT *
FROM (
SELECT DATE(MAX(RECEIVED)) DT,
INFO CASH_INFO,
SUM(IF(TRANS_TYPE = 714, AMOUNT, 0)) TOTAL_CASH,
'' AS OTHER_INFO,
0 AS TOTAL_CHEQUE,
0 AS TOTAL_CREDIT
FROM PAYMENT
WHERE LOGIN = 'opensys'
AND SOURCE_OF_TRX = '245T2'
AND RET_CODE_ID IN (0, 106, 110)
AND RECEIVED >= DATE_SUB('2015-09-23 16:30:42', INTERVAL 7 DAY)
AND TRANS_TYPE = 714
GROUP BY INFO
UNION
SELECT DATE(MAX(RECEIVED)) DT,
'' AS CASH_INFO,
0 AS TOTAL_CASH,
INFO OTHER_INFO,
SUM(IF(TRANS_TYPE = 715, AMOUNT, 0)), -- TOTAL_CHEQUE,
SUM(IF(TRANS_TYPE = 716, AMOUNT, 0)) -- TOTAL_CREDIT
FROM PAYMENT
WHERE LOGIN = 'opensys'
AND SOURCE_OF_TRX = '245T2'
AND RET_CODE_ID IN (0, 106, 110)
AND RECEIVED >= DATE_SUB('2015-09-23 16:30:42', INTERVAL 7 DAY)
AND TRANS_TYPE in (715, 716)
GROUP BY INFO
) A
GROUP BY CASH_INFO, OTHER_INFO
ORDER BY DT
结果并不准确,因为该记录没有对相同日期的记录进行分组。
我想要实现的是将结果与相同日期分组。
P/S:最后 2 条记录将始终返回相同的日期。这意味着 2015 年 9 月 23 日将有 2 个日期。
抱歉,我无法发布图片,因此我必须将其链接到我的 Google 云端硬盘。 image
最佳答案
不幸的是,MySQL 允许您发布的查询,但在几乎所有 RDMS SQL 引擎中都会失败,因为您选择带有 *
的项目,而不受聚合查询中的 GROUP BY
子句的限制。如果您设置了 sql_mode to ANSI此查询将给出 GROUP BY
错误。
考虑聚合查询的更正 ANSI 语法,仅选择要聚合的字段,然后按日期、cash_info 和 other_info 字段进行分组。
SELECT DT,
CASH_INFO,
Sum(TOTAL_CASH),
OTHER_INFO,
Sum(TOTAL_CHEQUE),
Sum(TOTAL_CREDIT)
FROM (
SELECT DATE(MAX(RECEIVED)) DT,
INFO CASH_INFO,
SUM(IF(TRANS_TYPE = 714, AMOUNT, 0)) TOTAL_CASH,
'' AS OTHER_INFO,
0 AS TOTAL_CHEQUE,
0 AS TOTAL_CREDIT
FROM PAYMENT
WHERE LOGIN = 'opensys'
AND SOURCE_OF_TRX = '245T2'
AND RET_CODE_ID IN (0, 106, 110)
AND RECEIVED >= DATE_SUB('2015-09-23 16:30:42', INTERVAL 7 DAY)
AND TRANS_TYPE = 714
GROUP BY INFO
UNION
SELECT DATE(MAX(RECEIVED)) DT,
'' AS CASH_INFO,
0 AS TOTAL_CASH,
INFO OTHER_INFO,
SUM(IF(TRANS_TYPE = 715, AMOUNT, 0)), -- TOTAL_CHEQUE,
SUM(IF(TRANS_TYPE = 716, AMOUNT, 0)) -- TOTAL_CREDIT
FROM PAYMENT
WHERE LOGIN = 'opensys'
AND SOURCE_OF_TRX = '245T2'
AND RET_CODE_ID IN (0, 106, 110)
AND RECEIVED >= DATE_SUB('2015-09-23 16:30:42', INTERVAL 7 DAY)
AND TRANS_TYPE in (715, 716)
GROUP BY INFO
) A
GROUP BY DT, CASH_INFO, OTHER_INFO;
关于mysql - SQL中如何对结果进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32817870/