简体   繁体   English

MySQL - 别名的总和未按预期工作

[英]MySQL - SUM of ALIAS not working as expected

ORIGINAL TABLE原始表

   TAG 1 |  TAG 2  | TAG 3  | DATE OF REQUEST | RSP_CODE | ERROR | VALUE  |

     1   |   A    |  99    | 29/10/2019      |    00    |   2   | 10.25  |
     2   |   A    |  99    | 28/10/2019      |    55    |   0   | 50.99  |
     1   |   A    |  99    | 28/10/2019      |    99    |   0   | 100.00 |
     3   |   B    |  99    | 27/10/2019      |    10    |   2   | 30.00  |
     2   |   C    |  99    | 29/10/2019      |    00    |   0   | 45.00  |

EXPECTED TABLE预期表

   ID |  A   |  B    |  C    |  D    |  E    |  F    |  G    |  H  |

 29_10_2019_1_A_99 |NUMBER |NUMBER |NUMBER |NUMBER |NUMBER |NUMBER |NUMBER |CURRENCY |
 29_10_2019_2_B_99   |NUMBER |NUMBER |NUMBER |NUMBER |NUMBER |NUMBER |NUMBER |CURRENCY |
 29_10_2019_3_C_88   |NUMBER |NUMBER |NUMBER |NUMBER |NUMBER |NUMBER |NUMBER |CURRENCY |

Name of Column - Expected value列名-预期值

ID - CONCATENATION OF DAY_MONTH_YEAH_TAG1_TAG2_TAG3 ID - DAY_MONTH_YEAH_TAG1_TAG2_TAG3 的串联

A - COUNT OF RSP_CODE '00' AND THAT THE ERROR IS NOT 2 A - RSP_CODE '00' 的计数并且错误不是 2

B - COUNT OF RSP_CODE THAT ARE NOT '00' AND THAT THE ERROR IS NOT 2 B -不是“00”且错误不是 2的 RSP_CODE 计数

C - COUNT OF RSP_CODE THAT ARE '00' AND THAT ERROR IS 2 C - 为“00”且错误为 2 的 RSP_CODE 计数

D - COUNT OF RSP_CODE THAT ARE NOT '00' AND THAT THE ERROR IS 2 D -不是“00”且错误为 2 的 RSP_CODE 计数

E - SUM OF VALUES THAT ARE RSP_CODE = '00' AND THAT ERROR IS NOT 2 E - RSP_CODE = '00' 且错误不是 2的值的总和

F - SUM OF VALUES THAT ARE NOT RSP_CODE '00' THAT THE ERROR IS NOT 2 F -不是 RSP_CODE '00' 的值的总和,错误不是 2

G - SUM OF VALUES THAT ARE RSP_CODE = '00' AND THAT ERROR IS '2' G - RSP_CODE = '00' 且错误为 '2' 的值的总和

H - SUM OF VALUES THAT ARE NOT RSP_CODE '00' AND THAT THE ERROR IS '2' H -不是 RSP_CODE '00' 且错误为 '2' 的值的总和

You can't refer to aliases in the same SELECT list.您不能在同一个SELECT列表中引用别名。 You need to put the query into a subquery.您需要将查询放入子查询中。

SELECT col0, 
        col1, col2, col3, col4, col5, col6, col7, col8,
        col1+col2+col3+col4 AS total1,
        col5+col6+col7+col8 AS total2
FROM (
    SELECT CONCAT(extract(day from datetime_req),"_",extract(month from datetime_req),"_",
                extract(year from datetime_req),"_",`card_acceptor_id_code`,"_",`terminal_id`,"_",`ext_nserie_simcard`,"_",`ext_connection_type`) AS 'col0',
        COUNT(CASE WHEN `rsp_code_rsp` = '00' AND `tran_reversed` = '0'  THEN 'APROVADA EFETIVADA' END)  AS 'Col1',
        COUNT(CASE WHEN `rsp_code_rsp` != '00' AND `tran_reversed` = '0'  THEN 'NEGADA EFETIVADA'  END)  AS 'Col2',
        COUNT(CASE WHEN `rsp_code_rsp` = '00' AND `tran_reversed` != '0'  THEN 'APROVADA DESFEITA' END)  AS 'Col3',
        COUNT(CASE WHEN `rsp_code_rsp` != '00' AND `tran_reversed` != '0'  THEN 'NEGADA DESFEITA'  END)  AS 'Col4',
        SUM(CASE WHEN `rsp_code_rsp` = '00' AND `tran_reversed` = '0'  THEN `tran_amount_req` ELSE 0 END)/100 AS 'col5',
        SUM(CASE WHEN  `rsp_code_rsp` != '00' AND `tran_reversed` = '0'  THEN `tran_amount_req` ELSE 0 END)/100 AS 'col6',
        SUM(CASE WHEN `rsp_code_rsp` = '00' AND `tran_reversed` != '0'  THEN `tran_amount_req` ELSE 0 END)/100 AS 'Col7',
        SUM(CASE WHEN  `rsp_code_rsp` != '00' AND `tran_reversed` != '0'  THEN `tran_amount_req` ELSE 0 END)/100 AS 'Col8'
    FROM `table`  
    WHERE `datetime_req` BETWEEN '2019-10-29 00:00:00' AND '2019-10-29 23:59:59' 
    GROUP BY col0
) AS x

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM