作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在执行的一些连接有以下输出:
------------------------------------------------
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。这可以通过允许将标题属性设置为像这样的列来实现吗?
-----------------------------------------------------------
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 来设置一些东西?不过我可能已经偏离了轨道
最佳答案
您只需要基本的条件聚合,假设正好有三个标题:
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,并使用 prepare
和 exec
来运行它。
关于MySQL Group By 将属性作为列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21689277/
我是一名优秀的程序员,十分优秀!