SELECT unit.*, sum( detail.order_money ) order_amount, sum( detail.one_commission ) one_commission, sum( detail.two_commission ) two_commission, ( sum( detail.two_commission ) + sum( detail.one_commission ) ) AS total_commission FROM profit_dividend_unit unit LEFT JOIN profit_dividend_detail detail ON unit.dividend_code = detail.dividend_code 修改改条sql,需要左表全部数据,没有对应的右表字段则显示空
时间: 2024-02-28 12:56:14 浏览: 16
可以使用 `LEFT OUTER JOIN`,同时使用 `COALESCE` 函数来将没有对应的右表字段显示为空。
修改后的 SQL 如下所示:
```
SELECT unit.*,
COALESCE(sum(detail.order_money), 0) as order_amount,
COALESCE(sum(detail.one_commission), 0) as one_commission,
COALESCE(sum(detail.two_commission), 0) as two_commission,
COALESCE((sum(detail.two_commission) + sum(detail.one_commission)), 0) as total_commission
FROM profit_dividend_unit unit
LEFT OUTER JOIN profit_dividend_detail detail ON unit.dividend_code = detail.dividend_code
GROUP BY unit.unit_id
```
在这个修改后的 SQL 中,我们使用了 `COALESCE` 函数,将可能为空的字段替换成了 0,确保了结果集中每一列都有值。同时,我们也保留了左表的全部数据,即使在右表中没有对应的记录。
相关问题
SELECT unit.*, COALESCE(sum(detail.order_money), 0) as order_amount, COALESCE(sum(detail.one_commission), 0) as one_commission, COALESCE(sum(detail.two_commission), 0) as two_commission, COALESCE((sum(detail.two_commission) + sum(detail.one_commission)), 0) as total_commission FROM profit_dividend_unit unit LEFT OUTER JOIN profit_dividend_detail detail ON unit.dividend_code = detail.dividend_code GROUP BY unit.unit_id 这个不使用GROUP BY,怎么写?
如果不使用 GROUP BY 子句,则可以使用子查询来实现相同的结果。例如:
SELECT unit.*,
(SELECT COALESCE(SUM(order_money), 0) FROM profit_dividend_detail WHERE dividend_code = unit.dividend_code) as order_amount,
(SELECT COALESCE(SUM(one_commission), 0) FROM profit_dividend_detail WHERE dividend_code = unit.dividend_code) as one_commission,
(SELECT COALESCE(SUM(two_commission), 0) FROM profit_dividend_detail WHERE dividend_code = unit.dividend_code) as two_commission,
(SELECT COALESCE(SUM(one_commission), 0) + COALESCE(SUM(two_commission), 0) FROM profit_dividend_detail WHERE dividend_code = unit.dividend_code) as total_commission
FROM profit_dividend_unit unit;
该语句将返回与原始查询相同的结果,但是使用了子查询来替代 GROUP BY 子句。
SELECT sum(t.pay_amount)+sum(t.promotion_amount)+SUM(t.author_coupon_subsidy)+SUM(t.actual_zt_pay_promotion)+SUM(t.actual_zr_pay_promotion)+SUM(t.refund_amount)+SUM(t.jylp_wp_amount)+SUM(t.post_amount)+SUM(t.promotion_amount_yf) as 'b_amount',\n" + "SUM(t.platform_service_fee)+SUM(t.commission)+SUM(t.channel_fee)+SUM(t.colonel_service_fee)+SUM(t.channel_promotion_fee)+SUM(t.other_sharing_amount)+SUM(t.yfx_amount)+SUM(t.jylp_yp_amount) as 's_amount'\n" + "from dy_settlement_push_input t where t.deleted = '0'
这是一条 SQL 查询语句,目的是查询 dy_settlement_push_input 表中满足条件(deleted = '0')的记录中,各种金额字段的总和。具体来说,该语句计算了以下金额:
1. pay_amount:支付金额
2. promotion_amount:促销优惠金额
3. author_coupon_subsidy:优惠券补贴金额
4. actual_zt_pay_promotion:直通车支付优惠金额
5. actual_zr_pay_promotion:直冲支付优惠金额
6. refund_amount:退款金额
7. jylp_wp_amount:加油礼品卡支付金额
8. post_amount:邮费金额
9. promotion_amount_yf:促销优惠金额(应付)
10. platform_service_fee:平台服务费
11. commission:佣金
12. channel_fee:渠道费用
13. colonel_service_fee:团长服务费
14. channel_promotion_fee:渠道促销费用
15. other_sharing_amount:其他分摊金额
16. yfx_amount:邮费险金额
17. jylp_yp_amount:加油礼品卡优惠金额
最终会返回两个金额总和,分别是 b_amount 和 s_amount。