|
подсчет количества уникальных значений в строке
|
|||
---|---|---|---|
#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 |
|
|
start [/forum/topic.php?fid=52&msg=39851219&tid=1882173]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 258ms |
total: | 396ms |
0 / 0 |