|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
Есть строка 2222224444466 нужно вывести 1) используемых символов: 2,4,6 2) кол-во уникальных: 3 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 08:55 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
Код: plsql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 09:03 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
Код: plsql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 11:24 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
MirnyiAtom, Сейчас придет Elic и будет ругать тебя за группировку через distinct с аналитикой. 👻 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 12:05 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
abortЕсть строка 2222224444466 Код: plsql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 13:03 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
Elic, вот! Ждал именно от этого метода regexp_replace. Но не смог выжать. Всем спасибо за правильные ответы! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 13:10 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
abortвот! Ждал именно от этого метода regexp_replace. Но не смог выжать.Ты понимаешь магию исходных данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 13:30 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
abortвот! Ждал именно от этого метода regexp_replace. Но не смог выжать.При условии, что сортировка внутри строки сохранится (посимвольная). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 13:38 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
mRdUKEabortвот! Ждал именно от этого метода regexp_replace. Но не смог выжать.При условии, что сортировка внутри строки сохранится (посимвольная). сначала '222222444446622244440' отсортировать, потом посчитать .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 13:43 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
abort, зачем тебе тут sql? решай через pl\sql и проще и на магию можно не полагаться) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 13:54 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
На малом словаре и длинных строках эффективнее этот словарь джоинить на строку. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 13:54 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
with q (val) as (select '2a42w776242224444466' from dual) select regexp_replace(listagg(substr(val,level,1),',') WITHIN GROUP (order by null),'([^,]+)(,\1)+', '\1') as "Используемые символы" , length(regexp_replace(listagg(substr(val,level,1),',') WITHIN GROUP (order by null),'([^,]+)(,\1)+', '\1')||',')/2 as "Кол-во уникальных" from q connect by substr(val,level,1) is not null ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 14:20 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
интересно, есть ли вариант быстрее, чем PL/SQL функция? на моем тестовом наборе она оказалась быстрее: тестовые данные Код: plsql 1. 2. 3.
PL/SQL вариант Код: 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.
SQL вариант Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
с таймингом Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 14:50 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
конечно, если ограничиться только цифрами, то translate получится проще и быстрее всего: Код: plsql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 14:59 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
xtender, мне кажется ты на вызове функции и ифах теряешь. может вместо: Код: plsql 1. 2. 3.
попробовать Код: plsql 1. 2. 3.
ну и если быть совсем честным, то надо убрать еще неявное преобразование Код: plsql 1. 2. 3.
сорри. в этой подсети нет оракла, а на сайт лезть влом. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 15:03 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
Vint Код: plsql 1.
смотри внимательно: это ассоциативный массив, в котором в ключах хранятся символы из строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 15:08 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
Vintну и если быть совсем честным, то надо убрать еще неявное преобразованиеособой разницы не будет, но проще, конечно, изменить на varchar2(1) а в приравнивании сделать null вместо 1, т.е: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 15:10 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
Dshedoo, я неуверен что поведение order by null не зависит от версии раньше заблуждался, считая что order by null не будет сортировать имхо, луче явно указывать поле сортировки ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 15:10 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
Stax, Согласен, лучше всегда всё указывать явно. Но в данном случае, нам же без разницы по какому полю будет сортировка, главное, чтобы оно было одинаковым для всех partition by val. А если я правильно понимаю, то order by null на разных версиях будет всегда однороден для всех записей? Никаких же рандомов и прочего? Я почему-то считал, что order by null = order by null'овое поле. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 15:24 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
DshedooЯ почему-то считал, что order by null = order by null'овое поле.Именно поэтому ничего не гарантирует. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 15:27 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
DshedooStax, Согласен, лучше всегда всё указывать явно. Но в данном случае, нам же без разницы по какому полю будет сортировка, главное, чтобы оно было одинаковым для всех partition by val. А если я правильно понимаю, то order by null на разных версиях будет всегда однороден для всех записей? Никаких же рандомов и прочего? Я почему-то считал, что order by null = order by null'овое поле. мож я неправильно понял Вашу регулярку если листагг не отсортирует, то не отработает и regexp_replace Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
к стати на апексе Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
ps в новых версиях distinct добавили в listagg, тогда и регулярки не надо ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 15:44 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
xtenderконечно, если ограничиться только цифрами, то translate получится проще и быстрее всего: Код: plsql 1. 2.
супер ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 16:56 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
xtender Код: plsql 1. 2.
Не будем останавливаться на пол-дороги :) Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 17:44 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
andrey_anonymous, не в ту сторону ты двинулся :) надо было вместо chr(0) последнего просто 'z' воткнуть - так намного короче ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 17:56 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
xtender, сорри, не доглядел. вот что значит пара месяцев без единой строчки кода) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 17:58 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
нашел еще один вариант, который быстрее, чем connect by: Код: plsql 1. 2. 3. 4.
Только вот баг там у оракла: в distinct-values какой-то отчаянный баг и на множестве строк начинает выдавать одни и те же данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 18:42 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
xtenderначинает выдавать одни и те же данные. По описанию - вероятно, кэш какой-то. Быть может, можно отключить... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 18:48 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
andrey_anonymous, да, фиксится, не успел ответить - ваял тест-кейс красивый :) как почти все XML баги, фиксится с помощью NO_XML_QUERY_REWRITE тест кейс, показывающий, что на 1-2 строках нет бага Код: 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.
результат Код: plsql 1. 2. 3. 4. 5. 6. 7.
пример фикса: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 18:58 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
xtenderинтересно, есть ли вариант быстрее, чем PL/SQL функция? на моем тестовом наборе она оказалась быстрее: instr не побыстрее колекций будет? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2019, 09:06 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
Staxxtenderинтересно, есть ли вариант быстрее, чем PL/SQL функция? на моем тестовом наборе она оказалась быстрее: instr не побыстрее колекций будет? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
так чуть быстрее Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2019, 09:45 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
andreymxStaxпропущено... instr не побыстрее колекций будет? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
так чуть быстрее Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
если есть/нет повторяющихся символов, то результаты меняются ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2019, 10:04 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
andreymx, медленнее у тебя Stax, на первый взгляд достаточно быстро, но точных замеров не стал проводить пока, тк заметил, что и у тебя и у andreymx результаты не сортированные, т.е. результаты для 123 и 132 будет разными. Мне это кажется минусом решения ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2019, 13:08 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
xtender, задача отсортировать не стояла, имхо сортировка возможно даже искажает результат мне просто было интересно сравнение древней instr (replace в случае andreymx ) с "навороченной " table of varchar2(100) index by varchar2(1); ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2019, 13:18 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
Если уж начался спорт, то что же вы остановились на *символах* строки, и не обобщили до *последовательностей* ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2019, 13:59 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
--Eugene--не обобщили до *последовательностей* ? Чойта не обобщили-то? 21952734 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2019, 14:05 |
|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#18+
xtenderandreymx, медленнее у тебя от данных зависит Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2019, 14:51 |
|
|
start [/forum/topic.php?all=1&fid=52&tid=1882173]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 176ms |
0 / 0 |