Как считать строки, где столбец массива содержит элемент

1

У меня есть стол, в котором есть столбец city[], поэтому у меня есть:

1 city [london]
2 city [london,paris]

Как я могу сосчитать город- london в моем столе?

  • 0
    Вы хотите посчитать, сколько строк содержат «Лондон» или сколько раз «Лондон» появляется в одном ряду?
  • 0
    спасибо @RealSkeptic, я хочу сейчас, сколько раз "Лондон" появляется во всех строках
Показать ещё 3 комментария
Теги:
database
arrays

2 ответа

2
Лучший ответ

Чтобы подсчитать все строки в таблице PostgreSQL, где определенное значение появляется в любом месте массива, вы используете функцию ANY:

SELECT COUNT(*) FROM cities WHERE 'london' = ANY( city );

(Предполагается, что таблица называется cities).

Предикат 'london' = ANY( city ) означает "Любой элемент в массиве city равен 'london' ". Это выберите строки, соответствующие "london", а затем подсчитайте их.

  • 0
    спасибо я попробую
2

Если таблица не является тривиально малой, вам нужно иметь индекс GIN в столбце массива. Для фактического использования этого индекса вы хотите использовать операторы массива вместо конструкции = ANY():

SELECT count(*) FROM cities WHERE '{london}'::text[] <@ city;

Детали:

  • 0
    это дает мне значение массива должно начинаться с "{" или информации о размерах
  • 0
    @MostafaJamareh: Извините, синтаксическая ошибка; исправлено. <@ ожидает массив с обеих сторон.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню