Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как посчитать количество уникальных значений в строке SQL

Артем Волков Ученик (72), на голосовании 1 год назад
Есть таблица с данными и в ней есть столбец X в котором длинные строки типа :

{"time": 1665344674, "distinct_id": "602339", "$app_build_number": "1", "$app_version_string": "2.8.1"}

Можно ли как то посчитать значения только для distinct_id ? Не количество строк, а именно встречающиеся в строке значения distinct_id. Данные выше занесены в один столбец, а мне нужно посчитать количество уникальных distinct_id.
Голосование за лучший ответ
Зеленая бяка Просветленный (41308) 1 год назад
Если это БД постгрес, то можно, на счет остальных не подскажу
 select count(distinct X->>'distinct_id') from table; 
Артем ВолковУченик (72) 1 год назад
Да постгрес, ваш вариант выдает ошибку, имена свои подставил (
No operator matches the given name and argument types. You might need to add explicit type casts.
Зеленая бяка Просветленный (41308) Артем Волков, я на своей БД на двух разных таблицах проверила - работает. У вас поле X jsonb типа? или оно строковое?
Артем ВолковУченик (72) 1 год назад
Я привел тип к jsonb :


 select count(distinct (X)::jsonb->>'distinct_id') from table; 
Так по идее должно работать, но выдает ошибку :
ERROR: invalid input syntax for type integer: "c6912f18-d1be-4198-8452-d8842b5b0f55"

Думаю связано с тем что в distinct_id иногда встречаются не цифровые значения, а например c6912f18-d1be-4198-8452-d8842b5b0f55. Может быть знаете как это исправить или откинуть эти не числовые значения
Зеленая бяка Просветленный (41308) Артем Волков, попробуйте все выражение после distinct в текст закастить
Похожие вопросы