今天在修改额外需求字段的时候,发现子查询语句没有返回字段。之前还是可以返回子查询字段的
SELECT COUNT(pay_status >= 1 AND pay_status < 5) AS total, SUM(pay_amount) AS payAmount, (SELECT SUM(pay_amount) FROM app_order WHERE pay_type = 7 ) AS refundAmount, (SELECT SUM(pay_amount) FROM app_order WHERE pay_type = 1) AS aliPayAmount, (SELECT SUM(pay_amount) FROM app_order WHERE pay_type = 2 and DATE(payment_time) = CURDATE()) AS weChatPayAmount, (SELECT SUM(pay_amount) FROM app_order WHERE pay_type = 3 and DATE(payment_time) = CURDATE()) AS dbPayAmount, (SELECT SUM(pay_amount) FROM app_order WHERE pay_type = 5 and DATE(payment_time) = CURDATE()) AS kuaiJiePayAmount, (SELECT SUM(use_cash) FROM app_order WHERE DATE(payment_time) = CURDATE()) AS useCash FROM app_order
运行结果
<== Columns: total, payAmount
<== Row: 79, 9016.70
<== Total: 1
之后通过COALESCE()可以查询出结果
SELECT COUNT(pay_status >= 1 AND pay_status < 5) AS total, SUM(pay_amount) AS payAmount, COALESCE((SELECT SUM(pay_amount) FROM app_order WHERE pay_type = 7 ), 0) AS refundAmount, COALESCE((SELECT SUM(pay_amount) FROM app_order WHERE pay_type = 1), 0) AS aliPayAmount, COALESCE((SELECT SUM(pay_amount) FROM app_order WHERE pay_type = 2 and DATE(payment_time) = CURDATE()), 0) AS weChatPayAmount, COALESCE((SELECT SUM(pay_amount) FROM app_order WHERE pay_type = 3 and DATE(payment_time) = CURDATE()), 0) AS dbPayAmount, COALESCE((SELECT SUM(pay_amount) FROM app_order WHERE pay_type = 5 and DATE(payment_time) = CURDATE()), 0) AS kuaiJiePayAmount, COALESCE((SELECT SUM(use_cash) FROM app_order WHERE DATE(payment_time) = CURDATE()), 0) AS useCash FROM app_order
运行结果
<== Columns: total, payAmount, refundAmount, aliPayAmount, weChatPayAmount, dbPayAmount, kuaiJiePayAmount, useCash <== Row: 79, 9016.70, null, null, 91.00, 78.10, 116.10, 15.10
最后发现原因是之前做分库分表的时候使用了 shardingsphere 4.1依赖导致无法执行子查询语句