#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