Если вы хотите получить наиболее часто встречающиеся первые две цифры на строку, вы можете использовать:
WITH data_rows(id, cpv_values) AS (
VALUES (1, ARRAY ['45331110', '50721000', '45251250','42160000','39715000','45315000', '09323000','71321200','45331100', '50720000'])
, (2, ARRAY ['50721000']) -- second test case
)
SELECT id, leading_two_digits
FROM data_rows
-- for every row in `data_rows` (your table),
-- select the most common `leading_two_digits` (through GROUP BY/ORDER BY/LIMIT 1)
JOIN LATERAL (
SELECT left(code, 2) AS leading_two_digits
FROM unnest(cpv_values) AS f(code)
GROUP BY left(code, 2)
ORDER BY COUNT(*) DESC
LIMIT 1
) s ON true
возвращает
+--+------------------+
|id|leading_two_digits|
+--+------------------+
|1 |45 |
|2 |50 |
+--+------------------+
Если вы хотите получить наиболее распространенные первые две цифры в всех строках, вы можете использовать:
WITH data_rows(cpv_values) AS (
VALUES (ARRAY ['45331110', '50721000', '45251250','42160000','39715000','45315000', '09323000','71321200','45331100', '50720000']),
(ARRAY ['45'])
)
SELECT left(code, 2) AS leading_two_digits
FROM data_rows, unnest(cpv_values) AS f(code)
GROUP BY left(code, 2)
ORDER BY COUNT(*) DESC
LIMIT 1