Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Аналитика в Pg
|
|||
|---|---|---|---|
|
#18+
bege231Округление, на мой взгляд как раз наименее значимый пункт решения задачи.на мой взгляд, без округления в этой задаче не будет и ошибки, не будет и невязки, не будет и самой задачи. Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 17:37 |
|
||
|
Аналитика в Pg
|
|||
|---|---|---|---|
|
#18+
bege231А тоже работает! Хотя и медленее чем join .Ну, для суммы по группе лучше, конечно же, использовать JOIN основной таблицы с агрегированным подзапросом. А скалярный подзапрос в SELECT-листе нужен для расчета накопительной суммы по группе с учетом сортировки. Типа аналог оракловой аналитической суммы: sum() over(partition by ... order by ...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 05:29 |
|
||
|
Аналитика в Pg
|
|||
|---|---|---|---|
|
#18+
bege231 Код: plaintext 1. 2. 3. 4. 1- value надо рассчитать в процентном соотношении - 3.47 * ( 351/(351+376+100)) 2 - т.о. по группе получается общая сумма 3,37 (должно быть 3,47) , невязка - 0.10 3 - невязку прибавляем к максимальной ( max =376 , прибавляем .10 к 1.56 ) На твоих тестовых данных построил табличку T1: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ID - уникальный идентификатор записи в таблице; остальные поля соответствуют твоим исходным данным: группа - номер группы; оплата - сумма оплаты; сумма - сумма для расчета процентного соотношения. Тогда можно написать запрос, который с учетом округления будет находить VALUE, расхождение суммы найденного VALUE с заданной суммой, а также помещать невязку в строку с максимальной суммой оплаты: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 08:15 |
|
||
|
Аналитика в Pg
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatна мой взгляд, без округления в этой задаче не будет и ошибки, не будет и невязки, не будет и самой задачи. Поля "сумма" и "оплата" - это в деньгах (руб) , а 10 знаков после запятой - это уже не деньги. Потому и приходится округлять, и считать невязки. Бабичев Сергей select count(1) from t1 t0 where t0."группа" = t1."группа" and (t0."оплата" > t1."оплата" or t0."оплата" = t1."оплата" and t0.id >= t1.id ) Как раз то что искала! Как-то так сразу до такого и не додумаешься. Теперь буду пользоваться! Спасибо огромное! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 11:17 |
|
||
|
Аналитика в Pg
|
|||
|---|---|---|---|
|
#18+
bege231 Бабичев Сергей select count(1) from t1 t0 where t0."группа" = t1."группа" and (t0."оплата" > t1."оплата" or t0."оплата" = t1."оплата" and t0.id >= t1.id ) Как раз то что искала! Как-то так сразу до такого и не додумаешься. Теперь буду пользоваться! Спасибо огромное! Ну, ты, если что, сразу говори, какую из аналитических функций оракла тебе нужно переложить на ANSI-SQL-99. Приведенный кусок кода - это аналог аналитического ROW_NUMBER() over(partition by "группа" order by "оплата" desc, id desc) :) Фактически, любую другую аналитическую функцию можно реализовать при помощи такого же подхода. По крайней мере, ранжирующие функции (rank, dense_rank, row_number), функции получения предыдущей/последующей записи (lead/lag), скользящая сумма (sum() over()) реализуются в легкую. Вот только эффективность запроса при этом значительно снизится... :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 11:41 |
|
||
|
Аналитика в Pg
|
|||
|---|---|---|---|
|
#18+
Вот и монстр получился! Думаю следующий вопрос автора будет "как мне всё это счастье теперь оптимизировать??". Потому что если сделать план подобных запросов ох не радует! Индексы помогут лишь отчасти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 17:24 |
|
||
|
Аналитика в Pg
|
|||
|---|---|---|---|
|
#18+
Что-то вспомнился старый анекдот, когда психов искали, раздавая им стакан и наперсток и проверяя, как они будут из ванны с водой воду выливать. Для аналитики есть как специальные библиотеки в разных языках, так и специализированные языки. Например, postgresql-8.1-plr поможет решить и более сложные задачи. В оракле просто нет таких возможностей, потому создают доп. функции, которые являются лишь жалким подобием возможностей хорошего пакета мат. статистики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 22:12 |
|
||
|
Аналитика в Pg
|
|||
|---|---|---|---|
|
#18+
Если кто не понял про анекдот, подсказываю - пробку из ванны надо было выдернуть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 22:14 |
|
||
|
Аналитика в Pg
|
|||
|---|---|---|---|
|
#18+
Склонность пытаться решить любой вопрос чистым T-SQL имхо распространненый синдром. Думаю тему можно закрывать до следующего пациента с вопросом как по-постгресовски сделать что-то оракловское и чтоб не кодить никаких ХП на Си или Перле. Короче - тема раскрыта осознана и закрыта. 8-D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 23:45 |
|
||
|
|

start [/forum/topic.php?fid=53&startmsg=35256973&tid=2004429]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 252ms |
| total: | 357ms |

| 0 / 0 |
