|
суммировать пропорции, хранящиеся в таблице
|
||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
#18+
Код: SQL 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
нужно для каждой группы таких значений получить суммарные значения в том же виде: отдельно числитель и отдельно знаменатель например, для группы 1 правильный ответ в виде результирующей строки будет таким:
1/2 + 2/1.4 + 3/5.2 = по правилам школьной математики приводим к общему знаменателю = 1 * 1.4 * 5.2 / (2 * 1.4 * 5.2) + 2 * 2 * 5.2 / 1.4 * 2 * 5.2 + 3 * 2 * 1.4 / 5.2 * 2 * 1.4 = (7.28 + 20.8 + 8.4) / 14.56 = 36.48 / 14.56 надеюсь не наделал ошибок при расчете либо если, скажем, получились в результате значения, которые можно сократить, типа:
как такое решить на sql? я могу наколхозить некрасивый код и решить это, но может есть более удачный вариант? не знаю, как умножить переменное количество значений, когда их может быть как тут всего 3 или много (вот суммировать потом их просто). вот так пытался сделать, но это не правильно, т.к. нужно перемножить другие числа, дальше не кумекается: хотелось бы избежать рекурсивного cte, но если никак, то ок... Код: SQL 1. 2. 3. 4.
... |
||||||||||||||||||
:
Изменено: 17.07.2024, 21:52 - kmvp
Нравится:
Не нравится:
|
||||||||||||||||||
17.07.2024, 21:45 |
|
суммировать пропорции, хранящиеся в таблице
|
|
---|---|
#18+
kmvp [игнорируется] Я не работаю с MSSQL и делал бы через user-defined aggregate function. Однако, в простых случаях может хватить следующего: https://onecompiler.com/sqlserver/42kgxgp38 Код: SQL 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Код: SQL 1. 2. 3. 4.
Код: SQL 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|
:
|
|
18.07.2024, 13:19 |
|
суммировать пропорции, хранящиеся в таблице
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2024, 13:41 |
|
суммировать пропорции, хранящиеся в таблице
|
|||
---|---|---|---|
#18+
kmvp [игнорируется] NVL это функция Oracle как я указал в своём сообщении. Её можно переписать через CASE. Через рекурсию что-нибудь подобное можно, но нужно аккуратно подобрать тип данных, т.к. я не знаком с типами данных MSSQL: https://onecompiler.com/sqlserver/42kh2mjmv Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2024, 14:09 |
|
суммировать пропорции, хранящиеся в таблице
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2024, 15:44 |
|
суммировать пропорции, хранящиеся в таблице
|
|
---|---|
#18+
kmvp [игнорируется] ms sql не имеет группировочной функции перемножения, только сложение - SUM(c), поэтому нужно както заменить перемножение на сложение. математика.- a^b * a^c = a^(b+c) я бы сделал проще и нагляднее - старым добрым курсором (который с версии 2008 наконец-то залетал), но логарифмы-экспоненты это интереснее ... |
|
:
|
|
19.07.2024, 11:35 |
|
|
Start [/forum/topic.php?fid=46&tid=2186990]: |
0ms |
get settings: |
28ms |
get forum list: |
9ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
88ms |
get topic data: |
43ms |
get forum data: |
4ms |
get page messages: |
303ms |
get tp. blocked users: |
1ms |
others: | 180ms |
total: | 668ms |
0 / 0 |