Как я могу получить разницу в процентах в запросе sql - PullRequest
1 голос
/ 28 апреля 2020

Предположим, у меня есть три стола

Один - фрукты

+----+--------+
| ID |  name  |
+----+--------+
|  1 | Mango  |
|  2 | Banana |
+----+--------+

Второй - fruit_initial_price

+----+----------+--------+
| ID | fruit_id | price  |
+----+----------+--------+
|  1 |        1 | 100.00 |
|  2 |        2 | 100.00 |
+----+----------+--------+

Третий - fruit_latest_price

+----+----------+--------+
| ID | fruit_id | price  |
+----+----------+--------+
|  1 |        1 | 120.00 |
|  2 |        2 |  80.00 |
+----+----------+--------+

Я хочу разницу между колонкой цены fruit_initial_price и fruit_latest_price (в процентах и ​​значении. С nagitav ie и положительным знаком)

Примерно так

+----+----------+----------------+--------------------+------+
| ID | fruit_id | diff_in_amount | diff_in_percentage |      |
+----+----------+----------------+--------------------+------+
|  1 |        1 |          20.00 | +20                | +20% |
|  2 |        2 |          80.00 | -20                | -20% |
+----+----------+----------------+--------------------+------+

Ответы [ 2 ]

3 голосов
/ 28 апреля 2020

Вы можете вычислить разницу в сумме и процентах в производной таблице, а затем отформатировать ее во внешнем запросе:

SELECT ID, name,
       FORMAT(diff_in_amount, 2) AS diff_in_amount,
       diff_in_percentage,
       CONCAT(IF(diff_in_percentage > 0, '+', '-'),
              ABS(ROUND(diff_in_percentage, 1)),
              '%') AS diff_percentage
FROM (
  SELECT f.ID, f.name,
         l.price - i.price AS diff_in_amount,
         100.0 * (l.price - i.price) / i.price AS diff_in_percentage
  FROM fruits f
  JOIN fruit_initial_price i ON i.fruit_id = f.ID
  JOIN fruit_latest_price l ON l.fruit_id = f.ID
) f   

Вывод (для данных примера):

ID  name    diff_in_amount  diff_in_percentage  diff_percentage
1   Mango   20.00           20                  +20.0%
2   Banana  -20.00          -20                 -20.0%

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

1 голос
/ 28 апреля 2020
select 
 *,
 CONVERT(VARCHAR,((l.price-i.price)*100)/100)+'%' as diff_in_percentage  
from fruits f , fruit_initial_price i ,fruit_latest_price l 
where f.Id = i.fruit_id and f.Id = l.fruit_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...