Подсчет символов в последовательностях через SQL - PullRequest
7 голосов
/ 09 июня 2011

У меня есть база данных с таблицей последовательности.Каждая (аминокислотная) последовательность в этой таблице состоит из 20 различных символов (A, V, ...).Например, "MQSHAMQCASQALDLYD ...".

Я бы хотел посчитать количество появлений каждого символа, чтобы я получил что-то вроде "2xM, 3xQ, ...".

Кроме того, я хотел бы сделать это для всех последовательностей в моей БД, чтобы я получил общий вид каждого символа.("248xM, 71x W, ...").

Как я могу сделать это в PostgreSQL?На данный момент я делаю это с Ruby, но у меня есть 25 000 последовательностей длиной около 400 символов каждая.Это займет некоторое время, и я надеюсь, что это будет быстрее с SQL.

Ответы [ 2 ]

7 голосов
/ 09 июня 2011

Вот как найти все А в строке:

select length(regexp_replace('AAADDD', '[^A]', '', 'g'));

Вот как найти все А в таблице:

select sum(length(regexp_replace(field, '[^A]', '', 'g'))) from table;
5 голосов
/ 27 января 2016

Я обычно нахожу определение функции многократного использования более гибким:

CREATE OR REPLACE FUNCTION numch(text, text) RETURNS integer AS
  $$ 
    SELECT length($2) - length(replace($2, $1, '')) 
  $$ LANGUAGE SQL;

И тогда вы можете использовать ее как:

SELECT sum(numch('A', colname)) AS nA, sum(numch('V', colname)) AS nV
  FROM relname;

Чтобы получить результаты, такие как:

   na   |   nv   
--------+--------
 359541 | 296330
(1 row)

Принято с этого потока psql-performance.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...