MySql - 枢轴 Table
MySql - Pivot Table
我正在尝试从 wp_postmeta table 中提取一些数据,这基本上是一系列 key/value 对与数字 post_id 相关联。因此,当我尝试为 post 提取各种值时,这就是我得到的:
这是我用来获取该输出的当前查询:
select post_id,meta_key,meta_value from wp_postmeta
where meta_key in ('_sku','_length','_width','_height')
and post_id in (
select post_id from wp_postmeta
where meta_value in ('28-005080','28-005287')
)
order by post_id DESC
我想做的是像这样格式化信息:
我已经尝试查看 MySql pivot table 示例,但我不确定它们是否适合这种特定情况。坦率地说,我不知道从哪里开始完成这项任务。
您可以使用条件聚合:
select post_id,
max(case when meta_key = '_sku' then meta_value end) as sku,
max(case when meta_key = '_length' then meta_value end) as length,
max(case when meta_key = '_width' then meta_value end) as width,
max(case when meta_key = '_height' then meta_value end) as height
from wp_postmeta
where
meta_key in ('_sku','_length','_width','_height')
and post_id in (select post_id from wp_postmeta where meta_value in ('28-005080','28-005287'))
group by post_id
order by post_id desc
实际上,我们可以用 having
子句替换 where
子句中的子查询:
select post_id,
max(case when meta_key = '_sku' then meta_value end) as sku,
max(case when meta_key = '_length' then meta_value end) as length,
max(case when meta_key = '_width' then meta_value end) as width,
max(case when meta_key = '_height' then meta_value end) as height
from wp_postmeta
group by post_id
having max(meta_value in ('28-005080','28-005287')) = 1
order by post_id desc
我正在尝试从 wp_postmeta table 中提取一些数据,这基本上是一系列 key/value 对与数字 post_id 相关联。因此,当我尝试为 post 提取各种值时,这就是我得到的:
这是我用来获取该输出的当前查询:
select post_id,meta_key,meta_value from wp_postmeta
where meta_key in ('_sku','_length','_width','_height')
and post_id in (
select post_id from wp_postmeta
where meta_value in ('28-005080','28-005287')
)
order by post_id DESC
我想做的是像这样格式化信息:
我已经尝试查看 MySql pivot table 示例,但我不确定它们是否适合这种特定情况。坦率地说,我不知道从哪里开始完成这项任务。
您可以使用条件聚合:
select post_id,
max(case when meta_key = '_sku' then meta_value end) as sku,
max(case when meta_key = '_length' then meta_value end) as length,
max(case when meta_key = '_width' then meta_value end) as width,
max(case when meta_key = '_height' then meta_value end) as height
from wp_postmeta
where
meta_key in ('_sku','_length','_width','_height')
and post_id in (select post_id from wp_postmeta where meta_value in ('28-005080','28-005287'))
group by post_id
order by post_id desc
实际上,我们可以用 having
子句替换 where
子句中的子查询:
select post_id,
max(case when meta_key = '_sku' then meta_value end) as sku,
max(case when meta_key = '_length' then meta_value end) as length,
max(case when meta_key = '_width' then meta_value end) as width,
max(case when meta_key = '_height' then meta_value end) as height
from wp_postmeta
group by post_id
having max(meta_value in ('28-005080','28-005287')) = 1
order by post_id desc