MYSQL如何使用联接查询计算百分比值
我有两张桌子MYSQL如何使用联接查询计算百分比值,mysql,left-join,Mysql,Left Join,我有两张桌子 User_packages(id,customer_id,total,vat,government_tax ) Payments(package_id,amount) 一个用户的套餐(假日套餐)可以有很多付款。这意味着总金额可以分期支付 我的目标是显示用户id和客户支付的百分比金额。 和 全部总额=总额+增值税+政府税 用户程序包 id | customer_id | total | vat | government_tax 1 | 1 | 2500 |
User_packages(id,customer_id,total,vat,government_tax )
Payments(package_id,amount)
一个用户的套餐(假日套餐)可以有很多付款。这意味着总金额可以分期支付
我的目标是显示用户id和客户支付的百分比金额。
和
全部总额=总额+增值税+政府税
用户程序包
id | customer_id | total | vat | government_tax
1 | 1 | 2500 |100 | 50
2 | 2 | 4500 |100 | 50
3 | 1 | 5000 |200 |100
付款
package_id | amount
1 | 500
1 | 2000
3 | 5000
3 | 300
我的预期结果是
package_id | payment percentage
1 | 94
2 | 0
3 | 100
如何使用MYSQL实现这一点?
到目前为止,我所做的只是加入查询
SELECT User_packages.id,Payments.amount FROM booking_widget.User_packages
left join Payments on User_packages.id = Payments.package_id;
我使用的是服务器版本:5.7.24-0ubuntu0.18.04.1(Ubuntu)您可以在下面尝试-
SELECT User_packages.id,(coalesce(amt,0)*100.0)/(total+Vat+government_tax) as percentage
FROM booking_widget.User_packages
left join
(select package_id,sum(amount) as amt from Payments group by package_id) as pay
on User_packages.id = pay.package_id;
试试这个:
SELECT User_packages.id,(Amounts.total + User_packages.vat + User_packages.government_tax) as 'payment percentage'
FROM booking_widget.User_packages
JOIN (SELECT package_id, sum(amount) as total FROM Payments GROUP BY package_id) as Amounts
ON User_packages.id = Amounts.package_id;
此查询将为您提供所需的结果:
SELECT u.id, COALESCE(ROUND(p.amount / (u.total + u.vat + u.government_tax) * 100), 0) AS payment_percentage
FROM user_packages u
LEFT JOIN (SELECT package_id, SUM(amount) AS amount
FROM payments
GROUP BY package_id) p ON p.package_id = u.id
输出:
id payment_percentage
1 94
2 0
3 100
谢谢,这很有效。如果要筛选属于某个状态(例如“已确认”)的记录,则用户_包中有一个名为status的列。可以将where子句en添加到此查询中吗?其中u.status=‘已确认’