mysql 枢轴检索字符串
mysql pivot retrieving strings
简单问题:从自定义数据透视表检索字符串的正确方法是什么table。有没有比MAX(CASE WHEN _ad.key = 'first_name' THEN _ad.value ELSE '' END) AS first_name
更好的办法
我的 table 工作正常,我的问题是如何检索单个字符串,我发现的每个问题都是询问如何聚合行以找到一堆行的总和。我的情况有更好的解决方案吗?由于只会返回一个值,因此它始终是最大值。
dev.mysql.com: "MAX() may take a string argument; in such cases, it returns the maximum string value."
这是我的查询的最小化版本。
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 |
|----------------------------------------
我相信你的方法很好,我会按照你的方法写的。
使用枢轴,您必须按枢轴分组 id_account。如果名字存在,可以通过最大 first_name 键派生。你做到了,你用 last_name 重复了那个。这非常好,它会为您带来正确的结果。所以你可以走了,据我所知。
试一试:
IFNULL(MAX(first_name), '')
简单问题:从自定义数据透视表检索字符串的正确方法是什么table。有没有比MAX(CASE WHEN _ad.key = 'first_name' THEN _ad.value ELSE '' END) AS first_name
我的 table 工作正常,我的问题是如何检索单个字符串,我发现的每个问题都是询问如何聚合行以找到一堆行的总和。我的情况有更好的解决方案吗?由于只会返回一个值,因此它始终是最大值。
dev.mysql.com: "MAX() may take a string argument; in such cases, it returns the maximum string value."
这是我的查询的最小化版本。
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 |
|----------------------------------------
我相信你的方法很好,我会按照你的方法写的。
使用枢轴,您必须按枢轴分组 id_account。如果名字存在,可以通过最大 first_name 键派生。你做到了,你用 last_name 重复了那个。这非常好,它会为您带来正确的结果。所以你可以走了,据我所知。
试一试:
IFNULL(MAX(first_name), '')