mysql pivot检索字符串

时间:2015-12-19 03:08:32

标签: mysql aggregate-functions pivot-table

简单问题:从自定义数据透视表中检索字符串的正确方法是什么。有没有比MAX(CASE WHEN _ad.key = 'first_name' THEN _ad.value ELSE '' END) AS first_name

更好的方法

我的表工作正常,我的问题是如何检索单个字符串,我发现的每个问题都是询问如何聚合行来查找一堆行的总和。对我的案子有更好的解决方案吗?由于只返回一个值,因此它始终是最大值。

dev.mysql.com:" MAX()可以采用字符串参数;在这种情况下,它返回最大字符串值。"

这是我查询的最小化版本。

SELECT
    _a.id_account,
    MAX(CASE WHEN _ad.`key` = 'first_name' THEN _ad.`value` ELSE '' END) AS first_name,
    MAX(CASE WHEN _ad.`key` = 'last_name' THEN _ad.`value` ELSE '' END) AS last_name

FROM
    `account` _a
        LEFT JOIN account_data _ad USING(id_account)

GROUP BY
    _a.id_account;



|----------------------------------------
|account
|----------------------------------------
|id_account  |
|1           |
|2           |
|----------------------------------------

|----------------------------------------
|account_data
|----------------------------------------
|id_account  |key           |value
|1           |first_name    |OneFirst
|1           |last_name     |OneLast
|2           |first_name    |TwoFirst
|----------------------------------------

|----------------------------------------
|mypivot
|----------------------------------------
|id_account  |first_name    |last_name
|1           |OneFirst      |OneLast
|2           |TwoFirst      |
|----------------------------------------

1 个答案:

答案 0 :(得分:2)

我相信你的方法非常好,我会以你的方式编写它。

使用透视功能,您必须按透视ID_account进行分组。如果first_name键存在,则可以通过max的第一个名称来派生名字。你做到了,你用last_name重复了这一点。这非常好,它会产生正确的结果。从我看到的情况来看,你很高兴。