MySQL显示分组结果

时间:2014-09-10 23:26:42

标签: mysql sql group-by subquery having


我有以下表格片段:

 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

所以基本上,所有带有相同标记的结果都会显示,按“组”分组。 这可能吗 ?我试图通过子查询,“分组依据”和“拥有”语句完成此操作,但我似乎无法找到正确的查询..

Thnx提前!

2 个答案:

答案 0 :(得分: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      |
+-------+-------+--------+

答案 1 :(得分: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行时才有效。