|
|
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
Никак не могу решить следующую задачу - может кто подскажет? Есть таблица с1 с2 с3 с4 с5 с6 1 1 2 1 3 1 4 1 5 1 6 1 7 Надо сделать группировку по ней по полю с1 что бы в результате вышло с1 с2 с3 с4 с5 с6 1 2 3 4 5 6 1 7 3 4 5 6 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2018, 14:35 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
криво написал таблицу таблица такая: с1 с2 с3 с4 с5 с6 1 2 - - - - 1 - 3 - - - 1 - - 4 - - 1 - - - 5 - 1 - - - - 6 1 7 - - - - ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2018, 14:39 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
Код: 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. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2018, 15:39 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
Ну а если гарантированно у строк с C2 IS NOT NULL поля C3, C4, C5, C6 всегда NULL то упрощаем: Код: 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. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2018, 15:45 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
А если у меня все значения c таблице кроме с1 не NUMBER? Как быть тогда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2018, 15:58 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
alexsm73А если у меня все значения c таблице кроме с1 не NUMBER? Как быть тогда? Замени SUM на MAX. Это если у строк с C2 IS NULL только одна где C3 IS NOT NULL, только одна где C4 IS NOT NULL, только одна где C5 IS NOT NULL, только одна где C6 IS NOT NULL. А если несколько, то что ты ожидаешь взад, например C3 = 'X' и C3 = 'Y'. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2018, 16:17 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
Спасибо!То что надо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2018, 16:45 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
И все-таки аналитика - это не совсем агрегация :) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2018, 01:54 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousИ все-таки аналитика - это не совсем агрегация :) Искусство ради искусства :) ? SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2018, 04:06 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous, Спасибо этот способ подходет больше. Но тут возникает проблема при создании процедуры: При создании курсора на этот селект Oracle ругается ошибкой ORA-30482: DISTINCT option not allowed for this function Можно это обойти как-то? У меня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2018, 10:46 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
alexsm73DISTINCTset() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2018, 10:54 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
alexsm73Спасибо этот способ подход е т больше.Чудо, ты откудова выползло возомнить себя программистом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2018, 11:22 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
Elic, Да учусь пока - поэтому и спрашиваю. Проблема в том что мне надо что бы была группировка по с1 и уникальность по другим столбцам. В этом варианте у меня вышло - но процедуру создать не могу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2018, 13:53 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
alexsm73Спасибо этот способ подходет больше. Сравни: Код: 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. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2018, 15:00 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
alexsm73Спасибо этот способ подходет больше. Кстати, если у строк с C2 IS NOT NULL поля C3, C4, C5, C6 всегда NULL (как в твоем примере), то аналитическое решение можно упростить: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2018, 15:14 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
SY, А как сделать что бы все стролбцы групировались по с1? т.е если таблица с1 с2 с3 с4 с5 с6 1 2 - - - - 1 - 3 - - - 1 - - 4 - - 1 - - - 5 - 1 - - - - 6 1 7 - - - - 1 - 8 ---- что выводилось бы 1 2 3 4 5 6 1 7 3 4 5 6 1 7 8 4 5 6 1 2 8 4 5 6 ну и так далее что бы в каждой строке было уникальное значение по всем столбцам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2018, 19:02 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
Никак - порядок строк в таблице просто нe существует. Порядок задается ORDER BY. Посему точто ты хочешь возможно только если в таблице есть поле задающее порядок строк. Например поле ID: Код: 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. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2018, 21:46 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
Похоже я непрaвильно понял логику: Код: 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. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2018, 22:10 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
SY, Спасибо большое! это как раз и есть то что надо было добиться в результате. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2018, 19:37 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
SYПохоже я непрaвильно понял логику: Код: 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. SY. из пушки по воробьям - так и память всю сожрать недолго. сравни планы, убийца )) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2018, 20:01 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
Fogelубийца )) Тренируйтесь, парни: Код: 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. 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. Ваших вариантов на этом наборе чот не дождался (~5мин, дальше лень). Вариант SY сожрал к этому времени порядка 30 гиг в темпе, Fogel - 17 гиг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2018, 20:50 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousВаших вариантов на этом наборе чот не дождался (~5мин, дальше лень). Вариант SY сожрал к этому времени порядка 30 гиг в темпе, Fogel - 17 гиг. Fogel - до финиша не дошел: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. SY побеждает в стиле СУМО, выпихнув Fogel из темпа - но все еще бежит, 37 гиг уже :) :) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2018, 20:59 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
Ан нет - SY тоже дисквалифицирован :) Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2018, 21:02 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousАн нет - SY тоже дисквалифицирован :) А что-еще ты ожидал? Законы комбинаторики еще никто не отмeнял . Если число строк для каждого C1 в пределах, то все будет пучком. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2018, 21:35 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
SYandrey_anonymousАн нет - SY тоже дисквалифицирован :) А что-еще ты ожидал? Ну я как-то вот так примерно ожидал: andrey_anonymous Код: plsql 1. 2. 3. Комбинаторику-то не обманешь, это правда, но зачем же стулья ломать? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2018, 21:42 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousКомбинаторику-то не обманешь, это правда, но зачем же стулья ломать? :) ...что-то подозревать я начал на тесте с mod(rownum,1000) - т.е. по сотне значений на id, это ведь "в пределах", да? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2018, 21:44 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous Код: plsql 1. 2. 3. Комбинаторику-то не обманешь, это правда, но зачем же стулья ломать? :) Не понял с какого перепугу "40 rows selected". Select должен вернуть 699993 строк: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2018, 22:08 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
SYНе понял с какого перепугу "40 rows selected". Select должен вернуть 699993 строк: Упс, пора перечитывать условия опять. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2018, 22:11 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
SYУпс, пора перечитывать условия опять. Похоже Андрей слепил "магию данных". Исходя из примера я решил что значения C2 - C6 уникальны a он слепил тест с повторяющимися значениями и скорее всего просто всунул DISTINCT в COLLECT: Код: 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. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2018, 22:48 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
SYПохоже Андрей слепил "магию данных". Не магию. Контрпример. Собственно, я зацепился глазом за эту тему, когда увидел решение агрегатной задачи на аналитике-фильтрации. Затем - комментарий к решению на агрегате "искусство ради искусства". Мои тараканы устроили митинг, на котором дружно заявили о недооценке спецэффектов, проистекающих от перерасхода памяти под промежуточные наборы данных (что весьма характерно для "аналитического" подхода к задаче агрегации). Я устроил тараканам репрессии и от комментариев удержался. Но тут влез Fogel и стало совсем смешно. Как итог - я построил демонстрационный контр-пример, просто слегка размножив исходный набор. Следует отметить, что эффект превзошел мои самые смелые ожидания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2018, 23:13 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousСледует отметить, что эффект превзошел мои самые смелые ожидания. Ну а я просто вижу эффект неполного определения условий задачи. Тут важное значение имеет уникальны ли c2 - c6. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 01:05 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
SYТут важное значение имеет уникальны ли c2 - c6. Поясню: Код: 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. 54. 55. 56. 57. 58. 59. 60. 61. 62. А вот агрегация c DISTINCT "умнее": Код: 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. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 01:32 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
Добрый день. Прошу совета как сделать, чтобы не плодить темы, решил написать здесь. Мне нужно сделать группировку. дано select null id, 32 d_id, 71 sn from dual union select null id, 62 d_id, 56 sn from dual union select 7 id, 62 d_id, 60 sn from dual union select null id, 60 d_id, 41 sn from dual union select null id, 82 d_id, 1 sn from dual union select 10 id, 82 d_id, 2 sn from dual union select 15 id, 82 d_id, 3 sn from dual нужно вывести id d_id sn null 32 71 7 62 60 null 60 41 15 82 3 Заранее спасибо за ответ. P.S. Нужно использовать аналитику? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 15:42 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
Код: 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.04.2018, 15:49 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
Egoр, Открой свою тему. Незачем "уводить" (не нашел лучшего перевода для hijack) чужую. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 16:04 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
SYEgoр, Открой свою тему. Незачем "уводить" (не нашел лучшего перевода для hijack) чужую. SY.Вообще-то я товарищу DenFrost ответил DenFrost Добрый день. Прошу совета как сделать, чтобы не плодить темы, решил написать здесь. Мне нужно сделать группировку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 16:47 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
DenFrost, а что не получается? Код: 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. .... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 18:18 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
я наверное чуток не дописал, вывести строчки с максимальным id по d_id и также строчки с id is null дано id d_id sn 3271 625676254 60 41 82110821115828 получить id d_id sn 327176254 60 4115828 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2018, 07:32 |
|
||
|
Группировка в Oracle
|
|||
|---|---|---|---|
|
#18+
я придумал такой вариант, может есть проще select * from ( select a.* , nvl(max (id) over (partition by d_id order by id desc nulls last), 0) max_id from ( select null id, 32 d_id, 71 sn from dual union select null id, 62 d_id, 56 sn from dual union select 15 id, 82 d_id, 8 sn from dual union select 7 id, 62 d_id, 54 sn from dual union select null id, 60 d_id, 41 sn from dual union select null id, 82 d_id, 0 sn from dual union select 10 id, 82 d_id, 11 sn from dual ) a ) where id = max_id or max_id = 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2018, 07:50 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1884085]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
76ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
83ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 437ms |

| 0 / 0 |
