【问题标题】:sql how to convert multi select field to rows with totalssql如何将多选字段转换为总计行
【发布时间】:2021-02-10 03:37:37
【问题描述】:

我有一个表,其中有一个字段,其中的内容是来自多选表单的选择的串联列表。我想将此字段中的数据转换为另一个表,其中每一行都有选择的文本,并计算此选择的次数。 例如。

原表:

id    selections
1     A;B
2     B;D
3     A;B;D
4     C

我想得到以下信息:

selection   count
A           2
B           3
C           1
D           2

我可以通过 javascript 等中的拆分和映射轻松做到这一点,但不确定如何在 SQL 中处理它。 (我使用 Postgresql)目标是使用第二个表在 Google Data Studio 中绘制图表。

【问题讨论】:

    标签: sql postgresql csv count lateral-join


    【解决方案1】:

    一个更简单的解决方案:

    select regexp_split_to_table(selections, ';'), count(*)
    from test_table
    group by 1
    order by 1;
    

    【讨论】:

    • 太棒了——我也会试试
    • 这个答案也很完美,不需要横向连接。谢谢@ndogac!
    【解决方案2】:

    您可以使用横向连接和方便的集合返回函数regexp_split_to_table() 将字符串取消嵌套到行,然后聚合和计数:

    select x.selection, count(*) cnt
    from mytable t
    cross join lateral regexp_split_to_table(t.selections, ';') x(selection)
    group by x.selection
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多