mysql相同行对应的列求和,MySQL - 基于来自同一个表的行对列值进行求和

I'm trying to get 'Cash', 'Check' and 'Credit Card' totals in new columns based on ProductID from the same table.

Table - Payments

+-----------+------------+---------------+--------+

| ProductID | SaleDate | PaymentMethod | Amount |

+-----------+------------+---------------+--------+

| 3 | 2012-02-10 | Cash | 10 |

| 3 | 2012-02-10 | Cash | 10 |

| 3 | 2012-02-10 | Check | 15 |

| 3 | 2012-02-10 | Credit Card | 25 |

| 4 | 2012-02-10 | Cash | 5 |

| 4 | 2012-02-10 | Check | 6 |

| 4 | 2012-02-10 | Credit Card | 7 |

+-----------+------------+---------------+--------+

Desired Output -

+------------+------+-------+-------------+-------+

| ProductID | Cash | Check | Credit Card | Total |

+------------+------+-------+-------------+-------+

| 3 | 20 | 15 | 25 | 60 |

| 4 | 5 | 6 | 7 | 18 |

+------------+------+-------+-------------+-------+

I've tried LEFT JOINing the same table but haven't had any success. Any suggestions would be appreciated. Thanks.

Unsuccessful and incomplete attempt -

SELECT P.ProductID, Sum( PCash.Amount ) AS 'Cash', SUM( PCheck.Amount ) AS 'Check', SUM( PCredit.Amount) AS 'Credit Card'

FROM Payments AS P

LEFT JOIN Payments AS PCash ON P.ProductID = PCash.ProductID AND PCash.PaymentMethod = 'Cash'

LEFT JOIN Payments AS PCheck ON P.ProductID = PCheck.ProductID AND PCheck.PaymentMethod = 'Check'

LEFT JOIN Payments AS PCredit ON P.ProductID = PCredit.ProductID AND PCredit.PaymentMethod = 'Credit'

WHERE P.SaleDate = '2012-02-10' GROUP BY ProductID;

解决方案

I think you're making this a bit more complicated than it needs to be.

SELECT

ProductID,

SUM(IF(PaymentMethod = 'Cash', Amount, 0)) AS 'Cash',

-- snip

SUM(Amount) AS Total

FROM

Payments

WHERE

SaleDate = '2012-02-10'

GROUP BY

ProductID

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值