Получение числа общих значений из 2 разделенных запятыми строк

На Raspberry Pi мне пришлось установить расширение php5 mysql.

apt-get install php5-mysql

После установки клиента веб-сервер должен быть перезапущен. В случае, если вы используете apache, должно работать следующее:

sudo service apache2 restart
0
задан a_horse_with_no_name 13 July 2018 в 13:41
поделиться

4 ответа

Проверьте это.

    select T.*,
    COALESCE(No_of_Match,'0')  
    from TT T Left join
    (
        select ID,count(ID) No_of_Match 
        from (
                select ID,unnest(string_to_array(trim(t.prods, ','), ',')) A
                from TT t)a 
        Where A in ('142','87')
        group by ID
    )B
    On T.Id=b.id

Демо здесь

OutPut

0
ответ дан Mr. Bhosale 17 August 2018 в 12:42
поделиться

Попробуйте следующее:

SELECT
    *,
    ARRAY(
        SELECT 
            * 
        FROM 
            unnest(string_to_array(trim(both ',' from prods), ',')) 
        WHERE 
            unnest = ANY(string_to_array(',142,87,', ','))
    )
FROM
    prods_table;

Выход:

1   ,142,10,75,     {142}
2   ,142,87,63,     {142,87}
3   ,75,73,2,58,    {}
4   ,142,2,         {142}

Добавьте функцию cardinality(anyarray) в последний столбец, чтобы получить только количество совпадений.

И подумайте об изменении дизайна базы данных.

1
ответ дан Adam 17 August 2018 в 12:42
поделиться

Если вы устанавливаете расширение intarray, это становится довольно простым:

select id, prods, cardinality(string_to_array(trim(prods, ','), ',')::int[] & array[142,87])
from bad_design;

В противном случае это немного сложнее:

select bd.id, bd.prods, m.matches
from bad_design bd
  join lateral (
    select bd.id, count(v.p) as matches
    from unnest(string_to_array(trim(bd.prods, ','), ',')) as l(p)
      left join ( 
         values ('142'),('87')  --<< these are your input values
      ) v(p) on l.p = v.p
    group by bd.id
  ) m on m.id = bd.id
order by bd.id;

Пример в Интернете: http: //rextester.com/ZIYS97736

Но вы действительно должны исправить свою модель данных.

0
ответ дан a_horse_with_no_name 17 August 2018 в 12:42
поделиться
with data as
( 
select *, 
unnest(string_to_array(trim(both ',' from prods), ',') ) as v
from myTable
),
counts as 
(
select id, count(t) as c from data 
left join 
( select unnest(string_to_array(',142,87,', ',') ) as t) tmp on tmp.t = data.v 
group by id
order by id
)
select t1.id, t1.prods, t2.c as "No. of Match"
from myTable t1
inner join counts t2 on t1.id = t2.id;
0
ответ дан Cetin Basoz 17 August 2018 в 12:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: