从MySQL JSON行获取统计信息

时间:2019-05-02 08:19:21

标签: mysql sql json

在我的表格中,我有一列存储调查的json表示形式。它具有下一种格式:

| ---------------------------------------------------------------------------------
|     survey 
| ------------------------------------------------------------------------------------
|[{"answers": ["1"], "question": "..."}, {"answers": ["1"], "question": "..."}, ...]
|-------------------------------------------------------------------------------------
|[{"answers": ["2"], "question": "..."}, {"answers": ["1"], "question": "..."}, ...]
---------------------------------------------------------------------------------------

问题包含问题的文本,答案包含用户对问题给出的字符串(答案)数组。每个记录中的问题顺序相同。

如何获取每个问题的答案统计信息。我的意思是,有多少用户在第一个问题等上选择1选项。

UPD : 如果问题有1个答案,得到了可行的解决方案,在我的情况下这是合适的解决方案。感谢Barmar提供的有用(否)参考:

SELECT
   JSON_ARRAYAGG(JSON_OBJECT('count', count, 'answer', answer)) as data,
   question 
FROM
   (
      SELECT
         count(*) as count,
         answer,
         question 
      FROM
         (
            SELECT
               JSON_UNQUOTE(JSON_EXTRACT(survey, CONCAT('$[', idx, '].answers[0]'))) as answer,
               JSON_UNQUOTE(JSON_EXTRACT(survey, CONCAT('$[', idx, '].question'))) as question 
            FROM
               user_profiles 
               JOIN
                  (
                     SELECT
                        0 AS idx 
                     UNION
                     SELECT
                        1 AS idx 
                     UNION
                     SELECT
                        2 AS idx 
                     UNION
                     SELECT
                        3 AS idx 
                     UNION
                     SELECT
                        4 AS idx 
                     UNION
                     SELECT
                        5 AS idx 
                     UNION
                     SELECT
                        6 AS idx 
                     UNION
                     SELECT
                        7 AS idx 
                     UNION
                     SELECT
                        8 AS idx 
                     UNION
                     SELECT
                        9 AS idx 
                     UNION
                     SELECT
                        10 AS idx 
                     UNION
                     SELECT
                        11 AS idx 
                     UNION
                     SELECT
                        12 AS idx 
                     UNION
                     SELECT
                        13 AS idx 
                     UNION
                     SELECT
                        14 AS idx 
                     UNION
                     SELECT
                        15 AS idx 
                     UNION
                     SELECT
                        16 AS idx 
                     UNION
                     SELECT
                        17 
                  )
                  AS indexes 
            WHERE
               JSON_UNQUOTE(JSON_EXTRACT(survey, CONCAT('$[', idx, '].question'))) IS NOT NULL 
         )
         as qa 
      GROUP BY
         answer,
         question 
      ORDER BY
         question 
   )
   as anwers 
GROUP BY
   question;
``

0 个答案:

没有答案