|
|
|
Вычитание двух сум (80lvl)
|
|||
|---|---|---|---|
|
#18+
Есть таблицы с доходами (profit_table1, profit_table2, profit_tableN) и одна таблица с выплатами (payoffs_table) Необходимо просуммировать суммы доходов и от итоговой суммы отнять просуммированную выплату. Примерно так: авторSELECT SUM(total_profit) AS total_profit FROM ( SELECT SUM(pt1.total_seller_profit) AS total_profit FROM profit_table1 pt1 WHERE pt1.seller_id=1 UNION SELECT SUM(pt2.total_seller_profit) AS total_profit FROM profit_table2 pt2 WHERE pt2.seller_id=1 UNION SELECT SUM(ptN.total_seller_profit) AS total_profit FROM profit_tableN ptN WHERE ptN.seller_id=1 ), (SELECT SUM(amount) FROM payoffs_table WHERE seller_id=1) AS total_paid, (total_profit-total_paid) AS total_remain_amount должно получиться три колонки: total_profit, total_paid, total_remain_amount Возможно ли такое средствами MySQL без привлечения програмных средств (php, python, etc.) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2015, 01:00:21 |
|
||
|
Вычитание двух сум (80lvl)
|
|||
|---|---|---|---|
|
#18+
Ark Bucky, 1. Дайте упрошеный пример исходных данных (5-7 строк) и ожидаемый результат. 2. Чем плох проведеный вами варинат? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2015, 01:50:17 |
|
||
|
Вычитание двух сум (80lvl)
|
|||
|---|---|---|---|
|
#18+
1. сделал тестовые данные, в аттаче 2. приведенный мной вариант плох тем что он не рабочий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2015, 02:17:42 |
|
||
|
Вычитание двух сум (80lvl)
|
|||
|---|---|---|---|
|
#18+
Ark Bucky, Ок, более-менее понятно. 1. МуСКЛ (и наверно все ДБ) не умеют делать запросы на заранее неизвесные таблицы. т.е. нельзя сказать select * from profit_table* 2. По всем правилам хорошего тона у вас дожна быть ОДНА таблица profit_table. Возможно с дополнительным полем который дескриминирует на тип записи profit_table1, profit_table2, итд. На самом деле и выплаты тоже должны быть в тойже таблице. 3. Если сможете свести все в одну таблицу, то дальше элементарная группировка по seller_id и SUM() решит проблему. 4. если обьединить нельзя, то извольте написать UNION ALL для всех profit_tableN и таблицы выплат и сделать в пункте #3. 5. ПОлезно сделать VIEW..UNION ALL на все profit_tableN и таблицы выплат который приведет варинат #4 к варианту #3. 6. Примерна так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2015, 04:20:59 |
|
||
|
Вычитание двух сум (80lvl)
|
|||
|---|---|---|---|
|
#18+
Ark Bucky, MySQL позволяет объявлять prepared statements, у которых строка запроса задаётся в виде пользовательской переменной: Код: sql 1. 2. 3. 4. Таким образом, чтобы не потребовались внешние скриптовые языки, достаточно создать и вызывать хранимую процедуру: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2015, 10:09:42 |
|
||
|
Вычитание двух сум (80lvl)
|
|||
|---|---|---|---|
|
#18+
mwanaanga, прежде чем советовать костыль, надо убедиться, что без него никак. Мы пока не знаем, может ли ТС менять структуру таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2015, 08:42:40 |
|
||
|
Вычитание двух сум (80lvl)
|
|||
|---|---|---|---|
|
#18+
спасибо за советы и предложения. потестив запросы, пришел к выводу что их производительность не укладывается в приемлемые рамки. структура таки придется менять. вопрос решен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2015, 14:09:09 |
|
||
|
Вычитание двух сум (80lvl)
|
|||
|---|---|---|---|
|
#18+
Ark BuckyЕсть таблицы с доходами (profit_table1, profit_table2, profit_tableN) и одна таблица с выплатами (payoffs_table) Необходимо просуммировать суммы доходов и от итоговой суммы отнять просуммированную выплату. должно получиться три колонки: total_profit, total_paid, total_remain_amount Возможно ли такое средствами MySQL без привлечения програмных средств (php, python, etc.) ? почему бы не так? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2015, 07:19:51 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=150&tid=1833723]: |
0ms |
get settings: |
7ms |
get forum list: |
22ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 338ms |

| 0 / 0 |
