|
|
|
Распределить суммы по максимально приближенной сумме.
|
|||
|---|---|---|---|
|
#18+
Распределить суммы по максимально приближенной сумме. Добрый день. Помогите сообразить, надо распределить суммы по максимально приближенной сумме. В 1-м приоритете распределяем, всем по 1-й сумме, далее 2 и 3 приоритете докидываем тем у кого сумма наименьшая, что бы в конце сумма была максимально приближенная друг другу. Если, with summ as ( select 1 id, 1 prioritet, 1000000 as summa from dual union all select 1 id, 1 prioritet, 100000 as summa from dual union all select 1 id, 1 prioritet, 10000 as summa from dual union all select 1 id, 2 prioritet, 10000 as summa from dual union all select 1 id, 2 prioritet, 10000 as summa from dual union all select 1 id, 2 prioritet, 10000 as summa from dual union all select 1 id, 3 prioritet, 50000 as summa from dual union all select 1 id, 3 prioritet, 50000 as summa from dual union all select 1 id, 3 prioritet, 50000 as summa from dual ), detki as ( select 1 id_s, 'Старший' as vozrost from dual union all select 1 id_s, 'Средний' as vozrost from dual union all select 1 id_s, 'Младший' as vozrost from dual ) select VOZROST, summa from detki, summ where id_s = id and prioritet =1 То нужно что бы результат был Старший 1000000 Средний 100000 Младший 10000 Если, with summ as ( select 1 id, 1 prioritet, 1000000 as summa from dual union all select 1 id, 1 prioritet, 100000 as summa from dual union all select 1 id, 1 prioritet, 10000 as summa from dual union all select 1 id, 2 prioritet, 10000 as summa from dual union all select 1 id, 2 prioritet, 10000 as summa from dual union all select 1 id, 2 prioritet, 10000 as summa from dual union all select 1 id, 3 prioritet, 50000 as summa from dual union all select 1 id, 3 prioritet, 50000 as summa from dual union all select 1 id, 3 prioritet, 50000 as summa from dual ), detki as ( select 1 id_s, 'Старший' as vozrost from dual union all select 1 id_s, 'Средний' as vozrost from dual union all select 1 id_s, 'Младший' as vozrost from dual ) select VOZROST, summa from detki, summ where id_s = id and prioritet in (1, 2) То нужно что бы результат был Старший 1000000 Средний 100000 Младший 40000 Если, with summ as ( select 1 id, 1 prioritet, 1000000 as summa from dual union all select 1 id, 1 prioritet, 100000 as summa from dual union all select 1 id, 1 prioritet, 10000 as summa from dual union all select 1 id, 2 prioritet, 10000 as summa from dual union all select 1 id, 2 prioritet, 10000 as summa from dual union all select 1 id, 2 prioritet, 10000 as summa from dual union all select 1 id, 3 prioritet, 50000 as summa from dual union all select 1 id, 3 prioritet, 50000 as summa from dual union all select 1 id, 3 prioritet, 50000 as summa from dual ), detki as ( select 1 id_s, 'Старший' as vozrost from dual union all select 1 id_s, 'Средний' as vozrost from dual union all select 1 id_s, 'Младший' as vozrost from dual ) select VOZROST, summa from detki, summ where id_s = id and prioritet in (1, 2, 3) То нужно что бы результат был Старший 1000000 Средний 150000 Младший 140000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 12:48 |
|
||
|
Распределить суммы по максимально приближенной сумме.
|
|||
|---|---|---|---|
|
#18+
amireyevРаспределить суммы по максимально приближенной сумме. Добрый день. Помогите сообразить, надо распределить суммы по максимально приближенной сумме. В 1-м приоритете распределяем, всем по 1-й сумме, далее 2 и 3 приоритете докидываем тем у кого сумма наименьшая, что бы в конце сумма была максимально приближенная друг другу. Код: 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. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. То нужно что бы результат был Старший 1000000 Средний 150000 Младший 140000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 12:53 |
|
||
|
Распределить суммы по максимально приближенной сумме.
|
|||
|---|---|---|---|
|
#18+
amireyev, Код: plsql 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. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. Чистым SQL решается model и rec with, но я не буду помогать выстрелить себе в ногу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 13:13 |
|
||
|
Распределить суммы по максимально приближенной сумме.
|
|||
|---|---|---|---|
|
#18+
Есть подозрение что красиво решается для 12с с помощью patter matching, но нет базы под рукой и вообще мне до отпуска осталось "работать" 2 часа. xtender позже напишет решение через match_recognize, зуб даю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 13:23 |
|
||
|
Распределить суммы по максимально приближенной сумме.
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, Спасибо, а как быть если я точно не знаю, количество распределения. То есть, я как пример взял троих (Старший, Средний, Младший). У тебя это (big, med, small), а мне надо брать с таблицы и там может быть разное количество. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 13:29 |
|
||
|
Распределить суммы по максимально приближенной сумме.
|
|||
|---|---|---|---|
|
#18+
amireyev, Я написал алгоритм "просеивания" (название выдумано на ходу). Если он годится для твоей задачи - то для большего числа групп просто IFы будут ветвистее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 13:33 |
|
||
|
Распределить суммы по максимально приближенной сумме.
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, проблема в том, что я не знаю точное количество групп, они могут меняться, вот этот момент не совсем понятен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 13:38 |
|
||
|
Распределить суммы по максимально приближенной сумме.
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopдля большего числа групп просто IFы будут ветвистее.Или просто вложенный цикл, если число групп заранее неизветсно. Но тогда паттерн матчингом не решится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 13:38 |
|
||
|
Распределить суммы по максимально приближенной сумме.
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, Можно пример, Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 13:39 |
|
||
|
Распределить суммы по максимально приближенной сумме.
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, У нас база 11. patter matching наверно не подойдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 13:42 |
|
||
|
Распределить суммы по максимально приближенной сумме.
|
|||
|---|---|---|---|
|
#18+
amireyev, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Дальше додумаешься один if написать? В массиве элементы от большого к маленькому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 13:46 |
|
||
|
Распределить суммы по максимально приближенной сумме.
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop Код: plsql 1. Видно мало практики в обратных циклах :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 13:56 |
|
||
|
Распределить суммы по максимально приближенной сумме.
|
|||
|---|---|---|---|
|
#18+
Elic, Если не трудно, можно ваш вариант. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 14:14 |
|
||
|
Распределить суммы по максимально приближенной сумме.
|
|||
|---|---|---|---|
|
#18+
Elic, Хаха, да признаю, не использовал уже давно. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 14:32 |
|
||
|
Распределить суммы по максимально приближенной сумме.
|
|||
|---|---|---|---|
|
#18+
Есть еще варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2017, 09:44 |
|
||
|
Распределить суммы по максимально приближенной сумме.
|
|||
|---|---|---|---|
|
#18+
amireyev, Так ты бы озвучивал точные критерии или что именно не устраивает. Например для чисел 6, 5, 4 и двух групп подход выше даст 10 и 5 а может ты ожидаешь 9 и 6. Читай про задачи на оптимизацию и динамическое программирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2017, 10:29 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39445412&tid=1886013]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
39ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 297ms |

| 0 / 0 |
