MySQL Group By属性为列?

时间:2014-02-10 22:31:54

标签: mysql sql database

我正在做一些连接的以下输出:

------------------------------------------------
      id             title              date
------------------------------------------------
       1             title1            01/01/03
       1             title3            01/01/05
       2             title2            01/01/02
       2             title3            01/01/01
       2             title1            01/01/06
       3             title1            01/01/07 
       3             title2            01/01/09

我想知道是否可以设置我的查询输出,以便每行都有一个不同的id。这可以通过允许将title属性设置为像这样的列来实现吗?

-----------------------------------------------------------
      id             title1       title2        title3     
-----------------------------------------------------------
       1             01/01/03      null        01/01/05
       2             01/01/06    01/01/02      01/01/01
       3             01/01/07    01/01/09        null

我不确定这只是疯狂的谈话,但是可以通过GROUP_BY设置一些东西?我可能在这里偏离轨道

1 个答案:

答案 0 :(得分:1)

你只需要基本的条件聚合,假设有三个标题:

select id,
       max(case when title = 'title1' then `date` end) as title1,
       max(case when title = 'title2' then `date` end) as title2,
       max(case when title = 'title3' then `date` end) as title3
from table t
group by id;

仅当您知道生成的SQL中所需的列列表时,此方法才有效。如果您有可变数量的潜在列,那么您有两个选择。第一种是使用group_concat()来生成这样的东西:

id          title1:date; title2:date . . .

这个的SQL是:

select id, group_concat(title, ':', date separator '; ')
from table t
group by id;

另一种是在字符串中创建必要的SQL,并使用prepareexec来运行它。