Я пытаюсь фильтровать и сортировать по вычисляемому столбцу, используя регистр, но я получаю синтаксическую ошибку.
Столбец разница_сумма и столбец платежей_сумма не найден
Мне нужно иметь предложение WHERE и ORDER BY.
У меня есть две таблицы «контракты» и «платежи».
Контракты Таблица
+----+-----------------+-----------+-----------+
| id | contract_number | legal_sum | bonus_sum |
+----+-----------------+-----------+-----------+
| 1 | 110258465651 | 50 | 20 |
| 2 | 564984656355 | 15 | 12 |
| 3 | 548498415165 | 150 | 35 |
+----+-----------------+-----------+-----------+
Платежи Таблица
+----+--------------+----------+
| id | contract_id | paid_sum |
+----+--------------+----------+
| 1 | 564984656355 | 7 |
| 2 | 564984656355 | 1 |
| 3 | 564984656355 | 2 |
+----+--------------+----------+
- Сначала мне нужно вычислить разницу между законной суммой и суммой бонуса (diff_sum)
- Тогда мне нужно получить сумму платежей.paid_sum (payment_sum)
- Тогда мне нужно отсортировать по критериям, если (payment_sum - diff_sum <= 0) </li>
Итак, я сделал этот запрос, но он говорит, что разность_сум не существует:
SELECT
(contracts.legal_sum - contracts.bonus_sum) as difference_sum
sum(payments.paid_sum) as payments_sum,
CASE
WHEN (difference_sum - payments_sum) <= 0 THEN "All paid"
WHEN (difference_sum - payments_sum) > 0 THEN "Not paid"
END AS isPaid
FROM contracts
INNER JOIN payments on contracts.id = payments.contract_id
WHERE isPaid = "All paid"
ORDER BY isPaid
Пример вывода:
+----------------+--------------+----------+
| difference_sum | payments_sum | isPaid |
+----------------+--------------+----------+
| 30 | 30 | All paid |
| 48 | 15 | Not paid |
| 100 | 100 | All paid |
+----------------+--------------+----------+