mySQL GROUP_CONCAT отличается разделителем каждый x результатов - PullRequest
0 голосов
/ 04 февраля 2020

в mySQL запрос является

GROUP_CONCAT(fieldname SEPARATOR ', ')

Но поле с не должно быть слишком длинным. Поэтому я хочу другой разделитель после x наборов данных (т.е. каждый третий разделитель должен быть '\ n')

Я был бы рад получить помощь для этого. Спасибо!

1 Ответ

0 голосов
/ 04 февраля 2020

Это настоящая боль. Один метод использует lead(), чтобы объединить три значения, а затем отфильтровать значения для каждого третьего:

select x,
       group_concat(col_3 separator '; ')
from (select t.x,
             concat_ws(', ',
                       col,
                       lead(col, 1) over (order by ?),
                       lead(col, 2) over (order by ?)
                      ) as col_3
             row_number() over (partition by x order by ?) as seqnum
      from t
     ) t
where mod(seqnum, 3) = 1
group by x;

Если вы хотите другие агрегации, вы можете отфильтровать в group_concat() вместо:

select x,
       group_concat(case when mod(seqnum, 3) = 1 then col_3 end separator '; ')
...