【问题标题】:Issue with GROUP_CONCAT and output to csvGROUP_CONCAT 问题并输出到 csv
【发布时间】:2012-08-14 12:12:41
【问题描述】:

我在使用 GROUP_CONCAT 并将结果导出到 csv 时遇到问题。

考虑下表
搜索结果
带有列搜索 ID |说明 |投票 |搜索类别

and consider the following data in the table
1|java, beans|2|java
2|serialization|3| java
3|jquery| 1|javascript
4|mysql joins|5| database

我需要以下格式的输出

Search Category| description1 | description 2 | votes 1 | votes 2
java           |java,beans    | serialization | 2       | 3
javascript     |jquery         |              | 1
database       | mysqljoins    |              | 5

我需要将此数据输出到 csv 文件中。

我写了以下查询 select category, GROUP_CONCAT(description), GROUP_CONCAT(votes) from search_results group by search_category 到 outfile '/tmp/out.csv' 字段以 ',' 结尾,由 '"' 括起来,行以 '\n' 结尾;

但是,以下是问题 - 上述查询分别返回一列用于显示逗号分隔值的描述和投票。我需要为每个值单独列(如所需输出所示) - 对于 javascript 类别,以格式返回输出

javascript|jquery|5<br/>

我需要输出格式 javascript|jquery| | 5| |

空值应该有一个占位符

【问题讨论】:

    标签: mysql


    【解决方案1】:
    SELECT
      s1.search_category
      , s1.description AS description1
      , ISNULL(s2.description, '') AS description2
      , s1.votes AS votes1
      , ISNULL(s2.votes, '') AS votes2
    FROM search_results AS s1
    LEFT OUTER JOIN search_results AS s2 ON s2.search_category = s1.search_category
    WHERE s1.search_id < s2.search_id
    INTO OUTFILE ...
    

    如果有第二列,则将表左连接到其自身将为您提供第二列。如果没有,则值将为 NULL,并且 ISNULL 将返回空格(或您想要的任何其他内容)。

    如果有超过 2 行具有相同的 search_category,您将在输出中获得超过 1 行,这可能不是您想要的。

    【讨论】:

    • 该解决方案不适用于我的情况,因为一个类别的结果数量是动态的,因此显示描述和投票的列数是动态的
    • 所以你的输出会有不同数量的列(有异味)或者你希望所有行都填充到最大列数?
    猜你喜欢
    • 2021-03-03
    • 2018-01-21
    • 2017-03-25
    • 1970-01-01
    • 2015-08-12
    • 2021-03-05
    • 2014-01-25
    • 1970-01-01
    相关资源
    最近更新 更多