SQL - группировка по одному полю и конкатенация другого - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть запрос, который возвращает следующую таблицу:

   P_id   S_id   Time
1  "20"     A    15 
2  "30"     B    50
3  "50"     A    99 
4  "70"     A    60

Я хочу сгруппировать таблицу на основе столбца «Sid» и отсортировать по столбцу «Time», чтобы она выглядела следующим образом:

        P_id       S_id   
1  "20","70","50"    A     
2       "30"         B    

Каков наилучший способ сделать это, изменив SQL-запрос?

При попытке просто добавить «GROUP BY S_id» я получаю сообщение об ошибке:

SELECT list expression references column query which is neither grouped nor aggregated at [2:16]

(То есть он не знает, как сгруппировать значения P_id (все строки)

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018
select group_concat(P_id,',') from tablename group by S_id ;
0 голосов
/ 13 декабря 2018

Я думаю, что вы хотите:

select s_id, group_concat(p_id order by time) as p_ids
from t
group by s_id;

Если вам нужен первый столбец с числами, вы можете добавить его в:

select (@rn := @rn + 1) as seqnum, s_id, group_concat(p_id order by time) as p_ids
from t cross join
     (select @rn := 0) params
group by s_id;
...