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=‘已确认’