mysql pivot 检索字符串

标签 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      |
|----------------------------------------

最佳答案

我相信你的方法非常好,我会按照你的方法来写的。

使用数据透视表,您必须按数据透视表 id_account 进行分组。如果存在,名字可以通过最大的 first_name 键派生。你这样做了,然后你用姓氏重复了一遍。这非常好,它会为您带来正确的结果。因此,据我所知,您可以开始了。

关于mysql pivot 检索字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34366847/

相关文章:

php - 如何按名称列出两个连接表信息(一些有名称,一些可能为空)

mysql - 错误 145 : Cannot add or update a child row within inserting data into database .。 mysql

mysql - 在表中更改我的 PK

sql - SQL OVER() 子句 - 何时以及为何有用?

Mysql 在聚合后选择最大的列

python - 如何让pivot_table 对值的组合应用函数?

mysql - 根据条件将 2 行合并为 1 行

sql - 使用分组依据查找数组中最常见的元素

php - vertical column in table 在html表格中水平显示查询结果

mysql - mysql 查询中的计数不正确,因为使用数据透视表 - 将行转换为列