У меня есть стол, в котором есть столбец city[]
, поэтому у меня есть:
1 city [london]
2 city [london,paris]
Как я могу сосчитать город- london
в моем столе?
Чтобы подсчитать все строки в таблице PostgreSQL, где определенное значение появляется в любом месте массива, вы используете функцию ANY
:
SELECT COUNT(*) FROM cities WHERE 'london' = ANY( city );
(Предполагается, что таблица называется cities
).
Предикат 'london' = ANY( city )
означает "Любой элемент в массиве city
равен 'london'
". Это выберите строки, соответствующие "london", а затем подсчитайте их.
Если таблица не является тривиально малой, вам нужно иметь индекс GIN в столбце массива. Для фактического использования этого индекса вы хотите использовать операторы массива вместо конструкции = ANY()
:
SELECT count(*) FROM cities WHERE '{london}'::text[] <@ city;
Детали:
<@
ожидает массив с обеих сторон.