2014-09-10 59 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 2014-09-10 23:34:18

+0

只有一个123,所以我真的不需要它 – Reyske 2014-09-11 08:29:31

回答

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 2014-09-11 08:28:55

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 2014-09-11 09:02:37