• 问卷答案的整理


    有四张表,分别对不同类型的问题进行汇总,数据是一个tel一个答案,同一个tel有对不同问题的回答,类似于:

    tela1
    123A
    123B
    123C

    四张表的结构一样,要做的是将四张表同一个答案放在同一列,类似于:

    tela0a1a2
    124ABnull
    125nullnullC
    126Anullnull

    上表只是一张表的内容,tel没有对应的答案就为null

    1.首先实现最基础的一张表的内容,要先找出所有答案一共多少种,找出枚举值,利用collect_set函数,得到类似["A","B","C"]的数组,对于每个tel也要找到对应的所有答案的数组,将总答案数组和tel对应答案数组比较,看总答案数组的每一个值是否出现在tel对应答案数组中,如果出现则输出

    总答案数组的那个值,没有出现则为null,使用array_contains函数判断包含,总答案数组的每一个值通过case when去实现

    2.四张表的实现是一样的方法,因为区分表,因此join key为表名,取最大的a1数作为字段数,基本过程是:

    每一行是join后对应的,每一行判断包含即可

    1. select tel, t2.table_name,
    2. case when array_contains(m_a1, n_a1[0]) then n_a1[0] end as a0,
    3. case when array_contains(m_a1, n_a1[1]) then n_a1[1] end as a1,
    4. case when array_contains(m_a1, n_a1[2]) then n_a1[2] end as a2,
    5. case when array_contains(m_a1, n_a1[3]) then n_a1[3] end as a3,
    6. case when array_contains(m_a1, n_a1[4]) then n_a1[4] end as a4,
    7. case when array_contains(m_a1, n_a1[5]) then n_a1[5] end as a5,
    8. case when array_contains(m_a1, n_a1[6]) then n_a1[6] end as a6,
    9. case when array_contains(m_a1, n_a1[7]) then n_a1[7] end as a7,
    10. case when array_contains(m_a1, n_a1[8]) then n_a1[8] end as a8,
    11. case when array_contains(m_a1, n_a1[9]) then n_a1[9] end as a9,
    12. case when array_contains(m_a1, n_a1[10]) then n_a1[10] end as a10,
    13. case when array_contains(m_a1, n_a1[11]) then n_a1[11] end as a11,
    14. case when array_contains(m_a1, n_a1[12]) then n_a1[12] end as a12,
    15. case when array_contains(m_a1, n_a1[13]) then n_a1[13] end as a13,
    16. case when array_contains(m_a1, n_a1[14]) then n_a1[14] end as a14,
    17. case when array_contains(m_a1, n_a1[15]) then n_a1[15] end as a15,
    18. case when array_contains(m_a1, n_a1[16]) then n_a1[16] end as a16,
    19. case when array_contains(m_a1, n_a1[17]) then n_a1[17] end as a17,
    20. case when array_contains(m_a1, n_a1[18]) then n_a1[18] end as a18,
    21. case when array_contains(m_a1, n_a1[19]) then n_a1[19] end as a19,
    22. case when array_contains(m_a1, n_a1[20]) then n_a1[20] end as a20,
    23. case when array_contains(m_a1, n_a1[21]) then n_a1[21] end as a21,
    24. case when array_contains(m_a1, n_a1[22]) then n_a1[22] end as a22
    25. from
    26. (
    27. select tel, collect_set(a1) as m_a1, table_name
    28. from
    29. (
    30. select tel, a1, 'u1' as table_name
    31. from u1
    32. union
    33. select tel, a1, 'u2' as table_name
    34. from u2
    35. union
    36. select tel, a1, 'u3' as table_name
    37. from u3
    38. union
    39. select tel, a1, 'u4' as table_name
    40. from u4
    41. ) t4
    42. group by tel, table_name
    43. ) t2
    44. inner join
    45. (
    46. select collect_set(a1) as n_a1, 'u1' as table_name
    47. from u1
    48. union
    49. select collect_set(a1) as n_a1, 'u2' as table_name
    50. from u2
    51. union
    52. select collect_set(a1) as n_a1, 'u3' as table_name
    53. from u3
    54. union
    55. select collect_set(a1) as n_a1, 'u4' as table_name
    56. from u4
    57. ) t3
    58. on t2.table_name = t3.table_name

     

  • 相关阅读:
    MySQL连接方式: Unix套接字 & TCP/IP
    Financial Statement Analysis with Large Language Models论文精读
    CTFshow 信息收集 web 6 7 8 9 10
    Linux练习题
    kubectl的基础命令使用
    Elasticsearch 8.9启动时构建接收Rest请求的hander过程源码
    python 线程池ThreadPoolExecutor
    进程间的通信方式(六种)
    不会就查!这部体验管理落地的「百科全书」,终于发布了
    C# 第五章『面向对象』◆第3节:构造函数(方法)
  • 原文地址:https://blog.csdn.net/weixin_43955488/article/details/126246985