3 жды переваривать json на одном уровне, ну ну, когда будет 10 полей будет еще медленнее... >>Всё продумано. Так проще чем её нормализовывать. если у вас все продумано, зачем спрашиваете?
и это переписать (jsonb_path_query(positions, '$[*] ? (@.client == 1)') ->> 'count')::NUMERIC AS count, (jsonb_path_query(positions, '$[*] ? (@.client == 1)') ->> 'state') AS state, (jsonb_path_query(positions, '$[*] ? (@.client == 1)') ->> 'percent')::NUMERIC AS percent, вы трижды заставляете варить один и тот же json
и это переписать (jsonb_path_query(positions, '$[*] ? (@.client == 1)') ->> 'count')::NUMERIC AS count, (jsonb_path_query(positions, '$[*] ? (@.client == 1)') ->> 'state') AS state, (jsonb_path_query(positions, '$[*] ? (@.client == 1)') ->> 'percent')::NUMERIC AS percent, вы трижды заставляете варить один и тот же json
Да я вкурсе. Но я не знаю как ещё эти три значения достать по фильтру