2014-09-10 2 views
0


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

 
stamp | group | value 
123  | 1  | 4 
124  | 2  | 5 
124  | 2  | 6 
125  | 4  | 7 
125  | 4  | 8 
125  | 5  | 9 

Я не могу найти запрос, который дает мне этот результат:

 
stamp | value1 | value2 
124  | 5  | 6 
125  | 7  | 8 
125  | 9  | null 

Так в основном, отображаются все результаты с одинаковой маркой, сгруппированные по «группе». Возможно ли это? Я попытался выполнить это с помощью подзапросов, операторов «group by» и «having», но я не могу найти правильный запрос.

Thnx заранее!

+0

Где 123 ??? – Mihai

+0

Есть только один 123, поэтому мне это действительно не нужно – Reyske

ответ

0
select stamp, 
     SUBSTR(`values`,1,INSTR(`values`,',')-1) as value1, 
     NULLIF(TRIM(',' FROM SUBSTR(`values`,INSTR(`values`,',')+1)),'') as value2, 
     `values` 
FROM 
(
SELECT stamp, `group`,CONCAT(GROUP_CONCAT(`value`) ,',') AS `values` 
FROM stamps 
GROUP BY stamp, `group` 
) aggr 

Fiddle Demo

Это работает только тогда, когда каждая группа имеет только < = 2 строки.

+0

То, что мне нужно! благодаря – Reyske

1

Я думаю, что нужно что-то вроде этого, более или менее:

SELECT stamp, `group`, GROUP_CONCAT(`value`) AS `values` 
FROM stamps 
GROUP BY stamp, `group` 

Ключ GROUP_CONCAT.

на основе ваших данных на выходе будет

+-------+-------+--------+ 
| stamp | group | values | 
+-------+-------+--------+ 
| 123 |  1 | 4  | 
| 124 |  2 | 5,6 | 
| 125 |  4 | 7,8 | 
| 125 |  5 | 9  | 
+-------+-------+--------+ 
+0

Отличный ответ! С дополнительной настройкой от Ravisankar это идеальный ответ. Благодаря ! – Reyske

Смежные вопросы