需要MySQL group_concat查询帮助

时间:2013-05-21 10:29:24

标签: mysql group-concat

我有一个MySQL数据库。我有一个表,其中包含不同开发人员建议的程序列表和估计时间。

如下:

proc_name   user_id    est_time
-------------------------------
'A'           1           20
'A'           3           15
'B'           2           16
'B'           4           18
'C'           1           20

现在我需要这样的输出

A|1_20|2_0 |3_15|4_0
B|1_20|2_16|3_0 |4_18
C|1_20|2_0 |3_0 |4_0

如果用户没有为proc_name发布任何小时数,则会打印“0”。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这不是“group_concat”。这是一个旋转的例子。

select proc_name,
       concat('1_', max(case when user_id = 1 then est_time else 0 end)),
       concat('2_', max(case when user_id = 2 then est_time else 0 end)),
       concat('3_', max(case when user_id = 3 then est_time else 0 end)),
       concat('4_', max(case when user_id = 4 then est_time else 0 end))
from t
group by proc_name

我觉得很奇怪,你将所有用户1放在第一列中,同时将“1”放在列值中。

实际上,如果您真的希望将数据作为单个字符串,那么您可以将上述结果连接在一起,而不是将它们放在单独的列中:

select concat_ws('|', proc_name,
                 concat('1_', max(case when user_id = 1 then est_time else 0 end)),
                 concat('2_', max(case when user_id = 2 then est_time else 0 end)),
                 concat('3_', max(case when user_id = 3 then est_time else 0 end)),
                 concat('4_', max(case when user_id = 4 then est_time else 0 end))
                )
from t
group by proc_name