MYSQL как рассчитать процентное значение с помощью запроса соединения - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть две таблицы,

User_packages(id,customer_id,total,vat,government_tax )

Payments(package_id,amount)

Один пакет User_packages (Holiday package) может иметь много платежей.Это означает, что общая сумма может быть выплачена в рассрочку.

Моя цель - показать идентификатор User_packages и процентную сумму, которую заплатил клиент.и

полный итог = всего + НДС + государственный налог

User_packages

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

MYОЖИДАЕМЫЕ РЕЗУЛЬТАТЫ БЫЛИ

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)

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018

Попробуйте это:

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;
0 голосов
/ 27 декабря 2018

Этот запрос даст вам нужные результаты:

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

Демонстрация на dbfiddle

0 голосов
/ 27 декабря 2018

Вы можете попробовать ниже -

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;
...