如何在mysql中使用group by来获取新的字符串列

时间:2016-04-05 05:05:55

标签: mysql

基本上我的问题是

  id  sid  string
    5    1    AAA
    6    1    BBB
    7    2    CCC
    8    3    ZZZ
    9    3    EEE

获得这样的输出

sid   str1   str2
1     AAA    BBB

其中groupby sid

2 个答案:

答案 0 :(得分:0)

尝试以下数据透视查询:

SELECT t.sid,
    CASE WHEN t.str1 > 0 THEN 'AAA' ELSE NULL END AS str1,
    CASE WHEN t.str2 > 0 THEN 'BBB' ELSE NULL END AS str2,
    CASE WHEN t.str3 > 0 THEN 'CCC' ELSE NULL END AS str3
FROM
(
    SELECT t.sid,
        SUM(CASE WHEN t.string = 'AAA' THEN 1 ELSE 0 END) AS str1,
        SUM(CASE WHEN t.string = 'BBB' THEN 1 ELSE 0 END) AS str2,
        SUM(CASE WHEN t.string = 'CCC' THEN 1 ELSE 0 END) AS str3
    FROM yourTable t
    GROUP BY t.sid
) t

答案 1 :(得分:0)

我不知道如何在飞行中创建新列,如果可能的话,但您可以使用GROUP_CONCAT获得类似的结果

 SELECT sid, GROUP_CONCAT(`string` SEPARATOR ',') AS string_cols FROM t GROUP BY sid

然后在您的应用程序逻辑中,您需要将string_colsSEPARATOR分成多个字段。