使用sql对多个字段进行分组

时间:2011-11-12 16:20:30

标签: mysql sql

在做了一些连接和填充后,我有以下格式的表格

name    session_id   status  time
abc         1          10
xyz         2          11 
jack        2          10
zuck        1          10 
paul        1          10 

现在我想将我的结果分组为

session_id   name+status                   time
1            abc:10, zuck:10, paul:10
2            xyz:11, jack:11             

并且结果集按时间排序,我很困惑如何使用group by

来实现这一点

2 个答案:

答案 0 :(得分:4)

如果您的数据库是oracle,您可以尝试。在oracle 11g r2之后,你也可以使用listagg

select session_id, wm_concat(name_status), time from 
(
  select session_id, (name+':'+status) as name_status, time
  from stuff
)
group by session_id
order by time

答案 1 :(得分:2)

SELECT
    session_id
  , GROUP_CONCAT( CONCAT(name, ':', COALESCE(status, -1) 
                  SEPARATOR ', '
                  ORDER BY `time`
                )  AS name_status
  , MIN(`time`)    AS min_time     --- or MAX(`time`)
FROM 
    TableX
GROUP BY
    session_id
ORDER BY
    min_time                    

如果所有具有相同time的行具有相同的MIN(time)(如果session_id在功能上依赖于{{1},则可以使用time代替time }})。如果情况并非如此,并且您使用session_id,则无法在该列上获得一致的结果。