Группировка по элементу массива в PostgreSQL

#sql #arrays #postgresql #group-by

#sql #массивы #postgresql #группировка по

Вопрос:

В Postgres 8.3 мне нужно группировать по определенным элементам в поле массива. Когда я группирую по самому массиву, отображаются все возможные комбинации. Я хочу группировать только по элементу.

что-то вроде этого работает для нахождения количества одного элемента:

 SELECT count(*)
FROM table
WHERE foo=any(bar)
  

это вернет правильное количество для одного элемента в массиве. Как мне вернуть несколько счетчиков для всех элементов в массиве? Если я сгруппирую по массиву, он будет использовать все элементы массива в том же порядке, в котором они хранятся (не то, что мне нужно).

редактировать для ясности: bar — это массив со значениями типа {foo, some, thing} или {foo, thing} или {some, thing, else}

Я хочу знать, сколько записей имеют значение элемента foo, some, thing и else в массиве «bar».

Ответ №1:

Что-то вроде

 GROUP BY bar[4]
  

Комментарии:

1. это фактический синтаксис? Я использую 8.3 и не заставляю его работать с вашим синтаксисом. Я обновлю свой вопрос лучшим примером.

Ответ №2:

Хм .. вы не можете группировать по значению.. но, конечно, значение — это столбец, который его содержит … Так что .. вам может понадобиться это:

 SELECT AVG(blah), foo
FROM whatever
WHERE foo=any(bar)
GROUP BY foo
  

должно сработать..

Комментарии:

1. у меня это не работает. если bar = {f, o,o}, ваш пример таков: ВЫБЕРИТЕ AVG(), f ИЗ любого, ГДЕ f= любая (bar) группа по f