|
Задача нахождения равновесной цены спроса и предложения
|
|||
---|---|---|---|
#18+
Доброго времени суток. Прошу помощи оптимизировать запрос. Есть исходная таблица ORDERS с заявками на покупку/продажу (любого товара), которая содержит следующие поля: OPER - 1 - заявка на покупку, 2 - заявка на продажу VAL_ORDER - объем покупки/продажи PRICE_ORDER - цена покупки/продажи (для покупателей (OPER = 1) - максимальная, для продавцов (OPER = 2) - минимальная) -1 - минимальная цена рынка 10000000 - максимальна цена рынка Задача: найти равновесную стоимось и объем рынка. Ниже запрос, который для каждой цены на рынке определяет объем покупки и объем продажи. В случае совпадения объемов - это будет равновесная цена покупки/продажи (спроса и предложения) Если совпадения не произошло то в случае превышения объема продажи от объема покупки (подряд проверять все записи курсора) - необходимо найти точку пересечения (анализировать точки). Если не произошло и превышения объема продажи от объема покупки - то продается весь объем, который готовы забрать покупатели (последняя запись курсора). Думаю что запрос построен не оптимальным способом (время его отработки при больших объемах заявок и циклических вызовах будет слишком большим): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
Результат запроса PRICE_ORDER SUM_VAL1 SUM_VAL2 10 18 1 20 18 1 30 13 6 40 13 8 50 13 13 60 13 19 70 9 21 80 5 21 100 3 21 В данном случае равновесная цена 50, а объем 13. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 10:14 |
|
Задача нахождения равновесной цены спроса и предложения
|
|||
---|---|---|---|
#18+
Energomarket В данном случае равновесная цена 50, а объем 13. Объем оказался меньше и объема покупки и объема продажи. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 13:14 |
|
Задача нахождения равновесной цены спроса и предложения
|
|||
---|---|---|---|
#18+
Energomarket, Для каждого из трех случаев распиши вычисления для ожидаемого ответа Код: plsql 1. 2. 3.
Код: plsql 1. 2. 3.
Код: plsql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 13:24 |
|
Задача нахождения равновесной цены спроса и предложения
|
|||
---|---|---|---|
#18+
Кобанчег, Ну да равновесная цена обычно на меньшем объеме (все конечно зависит от входных данных) https://ru.wikipedia.org/wiki/Закон_спроса_и_предложения#/media/Файл:Supply-demand-equilibrium.svg ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 16:36 |
|
Задача нахождения равновесной цены спроса и предложения
|
|||
---|---|---|---|
#18+
Energomarket, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
nvl дописывать лень ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 18:34 |
|
Задача нахождения равновесной цены спроса и предложения
|
|||
---|---|---|---|
#18+
Кобанчег, 1) Для случая select 100 as price_order, 10 as val_order, 1 oper from dual union all select 10 as price_order, 10 as val_order, 1 oper from dual union all select 5 as price_order, 10 as val_order, 2 oper from dual Результат: Цена Объем покупки Объем продажи 5 20 10 10 20 10 100 10 10 За цену 5 и 10 все покупатели готовы преобрести товар. Точка пересечения - цена 100 объем 10. Если разрабатывать биржу то итоговая цена будет 10, и объем 10. Но купит товар покупатель с ценой 100 (точка пересечения). 2) Для случая select 100 as price_order, 10 as val_order, 1 oper from dual union all select 10 as price_order, 10 as val_order, 2 oper from dual union all select 5 as price_order, 10 as val_order, 2 oper from dual Результат: Цена Объем покупки Объем продажи 5 10 10 10 10 20 100 10 20 За цену 5, 10 и 100 все покупатели (в данном случае 1) готовы преобрести товар. Точка пересечения - цена 5 объем 10. Для биржи тоже цена 5 объем 10. 3) Для случая select 100 as price_order, 20 as val_order, 1 oper from dual union all select 100 as price_order, 10 as val_order, 2 oper from dual union all select 10 as price_order, 10 as val_order, 2 oper from dual Результат: Цена Объем покупки Объем продажи 10 20 10 100 20 20 За цену 10 и 100 все покупатели готовы преобрести товар. Точка пересечения - цена 100 объем 20. Для биржи тоже цена 100 объем 20. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 19:32 |
|
Задача нахождения равновесной цены спроса и предложения
|
|||
---|---|---|---|
#18+
Кобанчег Energomarket, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
nvl дописывать лень Спасибо. Производительность этого запроса в моих примерах выше раза в три. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 19:40 |
|
Задача нахождения равновесной цены спроса и предложения
|
|||
---|---|---|---|
#18+
Energomarket, Если интересует апроксимация: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 19:53 |
|
Задача нахождения равновесной цены спроса и предложения
|
|||
---|---|---|---|
#18+
Думаю что запрос построен не оптимальным способом (время его отработки при больших объемах заявок и циклических вызовах будет слишком большим) Что есть циклический вызов в вашем контексте? И как часто вы собираетесь проводить такую аналитику? Надеюсь, не каждый час? Просто бывают вещи, которые просто нужно сделать, не обязательно идеально. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 20:00 |
|
Задача нахождения равновесной цены спроса и предложения
|
|||
---|---|---|---|
#18+
Кобанчег Energomarket, Если интересует апроксимация: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
За апроксимацию отдельное спасибо. Вы как будто этим вопросом раньше занимались. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 20:59 |
|
Задача нахождения равновесной цены спроса и предложения
|
|||
---|---|---|---|
#18+
Правильный Вася Думаю что запрос построен не оптимальным способом (время его отработки при больших объемах заявок и циклических вызовах будет слишком большим) Что есть циклический вызов в вашем контексте? И как часто вы собираетесь проводить такую аналитику? Надеюсь, не каждый час? Просто бывают вещи, которые просто нужно сделать, не обязательно идеально. Есть биржи, которые предоставляют своим клиентам интересные варианты заявок на покупку/продажу товара. Иногда найти пересечение спроса и предложения недостаточно и нужно перебрать несколько вариантов таких пересечений. Это делается для поиска наибольшего зароботка для покупателей и продавцов на бирже. И в таком случае поиск пересечение спроса и предложения должен работать максимально быстро. Ваш вариант работает оптимально быстро. Такими ответами вы спасаете мир. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 21:06 |
|
Задача нахождения равновесной цены спроса и предложения
|
|||
---|---|---|---|
#18+
Правильный Вася Думаю что запрос построен не оптимальным способом (время его отработки при больших объемах заявок и циклических вызовах будет слишком большим) Что есть циклический вызов в вашем контексте? И как часто вы собираетесь проводить такую аналитику? Надеюсь, не каждый час? Просто бывают вещи, которые просто нужно сделать, не обязательно идеально. Сейчас вызовов порядка 1000 в сутки. Но будем пробовать до 1 000 0000. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 21:10 |
|
Задача нахождения равновесной цены спроса и предложения
|
|||
---|---|---|---|
#18+
Energomarket Сейчас вызовов порядка 1000 в сутки. Но будем пробовать до 1 000 0000. А в случае 1 000 000 вызовов SQL решение вообще вариант. Массив данных и pre-calculated values надо держать в памяти. Приведенное SQL решение можно слегка оптимизировать так что вместо 4-х операций WINDOW SORT/WINDOW BUFFER будет одна, но это особой погоды не сделает. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 21:26 |
|
Задача нахождения равновесной цены спроса и предложения
|
|||
---|---|---|---|
#18+
Кобанчег Energomarket Сейчас вызовов порядка 1000 в сутки. Но будем пробовать до 1 000 0000. А в случае 1 000 000 вызовов SQL решение вообще вариант. Массив данных и pre-calculated values надо держать в памяти. Приведенное SQL решение можно слегка оптимизировать так что вместо 4-х операций WINDOW SORT/WINDOW BUFFER будет одна, но это особой погоды не сделает. На данном этапе sql полностью устаивает, так как не требует переработки всего кода. В будущем планируем рабтать с массивами, но нужно код переписывать. Возможно рассмотрим внешние модули к oracle (язык более низкого уровня), на массивы plsql меньше надежды. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 23:45 |
|
|
start [/forum/topic.php?fid=52&fpage=48&tid=1881363]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
70ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 303ms |
total: | 476ms |
0 / 0 |