Skip site navigation (1) Skip section navigation (2)

Peripheral Links

Header And Logo

PostgreSQL
| The world's most advanced open source database.

Site Navigation

Search archives
  Advanced Search

Re: Аналог distinct для ма ссива


  • From: Dmitriy MiksIr <miksir(at)maker(dot)ru>
  • To: pgsql-ru-general(at)postgresql(dot)org
  • Subject: Re: Аналог distinct для ма ссива
  • Date: Thu, 21 Feb 2008 19:56:37 +0300
  • Message-id: <fpkag5$8mk$1@ger.gmane.org> <text/plain>

У меня другая задача немного. На примере, имеем записи:
[1,2,3]
[3,4]
[2,6]
нужно получить или один массив [1,2,3,4,6] или набор int-ов
1
2
3
4
6

Приходит в голову
    FOR resrow IN
      SELECT marks
        FROM firms WHERE ...
    LOOP
      SELECT array_cat(carr,resrow.marks) INTO carr;
    END LOOP;
и потом на carr натравить uniq... возможно это будет красивее, чем вариант ниже.


А то, что в intarray описан оператор && который уже есть в 8.2 - не страшно?


Oleg Bartunov пишет:
On Thu, 21 Feb 2008, Dmitriy MiksIr wrote:

Да, но того что может помочь не нашел. Может смотрел не туда.

там есть функция uniq


Единственная идея, что появилась - это сложить как-то все массивы по строкам, и на итоговый сказать uniq ... но красивая реализация в голову не идет.

Или написать функцию, которая будет раскрывать масив и выдавать результат как набор строк, т.е.
arr     | other
[1,2,3] | bla
преобразовывать в
1 | bla
2 | bla
3 | bla
только можно ли силами plpgsql пройтись циклом по массиву?

Oleg Bartunov пишет:
Если это integer arrays, то есть http://www.sai.msu.su/~megera/postgres/gist/intarray/README.intarray
Заодно получишь много чего приятного :)

Олег
On Thu, 21 Feb 2008, Dmitriy MiksIr wrote:


 Приветствую!

Есть необходимость выбирать уникальные значения из всей таблицы по полю integer[] (уникальные как по строкам, так и по массиву). Делаю сейчас это так (кусок функции):
SELECT max(array_upper(marks,1)) INTO size FROM firms WHERE ...;
FOR resrow IN
  SELECT distinct(f.marks[g.n]) as result
    FROM firms f, generate_series(1,size) g(n) WHERE ...;
...
Не очень нравится такое решение своей красотой (ибо если, например, одна строка - 100 элементов массива, а остальные - по 2-3, получается очень накладно). Может есть другие решения?


---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?

             http://www.postgresql.org/docs/faq


    Regards,
        Oleg
_____________________________________________________________
Oleg Bartunov, Research Scientist, Head of AstroNet (www.astronet.ru),
Sternberg Astronomical Institute, Moscow University, Russia
Internet: oleg(at)sai(dot)msu(dot)su, http://www.sai.msu.su/~megera/
phone: +007(495)939-16-83, +007(495)939-23-83
---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
      choose an index scan if your joining column's datatypes do not
      match



---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend


    Regards,
        Oleg
_____________________________________________________________
Oleg Bartunov, Research Scientist, Head of AstroNet (www.astronet.ru),
Sternberg Astronomical Institute, Moscow University, Russia
Internet: oleg(at)sai(dot)msu(dot)su, http://www.sai.msu.su/~megera/
phone: +007(495)939-16-83, +007(495)939-23-83
---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo(at)postgresql(dot)org so that your
      message can get through to the mailing list cleanly





Home | Main Index | Thread Index

Privacy Policy | About PostgreSQL
Copyright © 1996 – 2012 PostgreSQL Global Development Group