按多列中的值查询组

时间:2013-04-10 08:47:14

标签: mysql sql

我有一张表:

ID key familyname  street     pin
1   1    xxx          abc      11
2   1    xxx          acf      13
3   1    xxx1         acf      13
4   1    xxx1         bcf      12
5   2    yyy          abc      11
6   2    yyy          abc      11
7   2    yyy1         bcj      13
8   2    yyy1         bck      14
9   2    yyy2         btj      15
10  2    yyy2         byj      16

现在我想根据每个键的columnn“familyname”对street和pin进行分组。例如,我希望上表的输出为

ID key familyname  street     pin
1   1    xxx        abc,acf    11,13

3   1    xxx1       acf,bcf    13,12

5   2    yyy        abc,abc    11,11

7   2    yyy1       bcj,bck    13,14

9   2    yyy2       btj,byj    15,16

如果我可以得到关于分组查询设计的一些建议,这可能会给我一个如上所示的方式的结果,这将是非常有帮助的

非常感谢

1 个答案:

答案 0 :(得分:3)

MySQL具有内置功能,可以为每个名为GROUP_CONCAT()的组连接行。

SELECT  MIN(ID) ID,
        `key`,
        familyName,
        GROUP_CONCAT(street) street,
        GROUP_CONCAT(pin) pin
FROM    TableName
GROUP   BY `key`, familyName

输出

╔════╦═════╦════════════╦═════════╦═══════╗
║ ID ║ KEY ║ FAMILYNAME ║ STREET  ║  PIN  ║
╠════╬═════╬════════════╬═════════╬═══════╣
║  1 ║   1 ║ xxx        ║ abc,acf ║ 11,13 ║
║  3 ║   1 ║ xxx1       ║ acf,bcf ║ 13,12 ║
║  5 ║   2 ║ yyy        ║ abc,abc ║ 11,11 ║
║  7 ║   2 ║ yyy1       ║ bcj,bck ║ 13,14 ║
║  9 ║   2 ║ yyy2       ║ btj,byj ║ 15,16 ║
╚════╩═════╩════════════╩═════════╩═══════╝