MariaDB使用唯一过滤器从行到列查询

txu3uszq  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(101)

我试图在一个表中将一些行转换为列,但无法正常工作。:(
下面是一个简单的MariaDB表,名为runningtimes

因此,我尝试了各种方法,包括枢轴或聚合,但我总是得到错误或不是所需的输出。
我正在寻找的是这样的东西:

列标题应该包含行值,最终的结果应该有一个过滤器,只显示每个跑步者的最快时间。
如果你能帮忙的话,我将不胜感激。

uqjltbpv

uqjltbpv1#

由于你没有发布你得到的错误或你到现在为止尝试的代码示例,我只能假设你必须面对列名中的特殊字符的问题。
我可以帮你转动table。在这种情况下,您需要在列名中使用(`)反引号。
所以pivot table代码看起来像这样:

Select 
  entry_id,
  (case when meta_key = "name-1" then meta_value end) as `name-1`,
  max(case when meta_key = "name-2" then meta_value end) as `name-2`,
  max(case when meta_key = "select-1" then meta_value end) as `select-1`,
  max(case when meta_key = "select-2" then meta_value end) as `select-2`,
  min(case when meta_key = "text-1" then meta_value end) as `text-1`
  
from runningtimes
group by entry_id , "name-1", "text-1"

然后在select语句中使用where子句只从伦敦过滤数据:

Select * from runningtimes_Pivot where `select-2` = "London"

带有过滤器数据的代码:https://dbfiddle.uk/cOn9XHyA
根据您的评论编辑的答案:

Select 
  entry_id,
  `name-1`,
  `name-2`,
  `select-1`,
  `select-2`,
   `text-1`
from
(
Select 
  entry_id,
  (case when meta_key = "name-1" then meta_value end) as `name-1`,
  max(case when meta_key = "name-2" then meta_value end) as `name-2`,
  max(case when meta_key = "select-1" then meta_value end) as `select-1`,
  max(case when meta_key = "select-2" then meta_value end) as `select-2`,
  min(case when meta_key = "text-1" then meta_value end) as `text-1`
from runningtimes
group by entry_id , "name-1", "text-1"
)ref1
group by `name-1`

相关问题