programing

키 Json, Sum 및 동적 그룹화 방법

newstyles 2023. 7. 23. 14:06

키 Json, Sum 및 동적 그룹화 방법

제 mariadb 서버에 json 컬럼이 있습니다.문제가 생겼어요: 저는 json을 그룹화할 수 없어요.

저는 절차와 기능을 사용하려고 시도했지만 계속 실패했습니다. 초보자보다 이것을 더 잘하는 친구들에게 이 솔루션을 제공하는 방법을 포함했으면 합니다.

표본 데이터:

id   name           json
------------------------------------------------------
1    lorem ipsum    {"a":2,"b": 10, "c": 20}
2    lorem ipsum2   {"a":1, "b":8, "c": 21, "d":7}
2    lorem ipsum2   {"b":1, "e":8, "h": 21, "j":7}

이제 다음과 같은 출력 데이터를 원합니다. 값을 계산하고 데이터가 json 개체의 A에서 Z로 증가하는 경우 2진법으로 계산합니다.

key  average  max_value  min_value  sum_value  count_data
---------------------------------------------------------
a    1.5      2          1          3          2
b    8.2      10         1          19         3
c    20.5     21         20         41         2
d    7        7          7          7          1

표본 데이터에는 4개의 키에 대한 결과만 표시되지만 데이터에는 그 이상의 결과가 있습니다.다음은 고정 키 집합에 대한 결과를 원하는 경우 해결책입니다. 하위 쿼리를 사용하여 고려해야 할 키와 외부 쿼리의 조건부 집계를 나열합니다.JSON_EXTRACT개체의 컨텐츠에 액세스할 수 있습니다.

SELECT
    v.val,
    AVG(JSON_EXTRACT(js, CONCAT('$.', v.val))) AS average,
    MAX(JSON_EXTRACT(js, CONCAT('$.', v.val))) AS max_value,
    MIN(JSON_EXTRACT(js, CONCAT('$.', v.val))) AS min_value,
    SUM(JSON_EXTRACT(js, CONCAT('$.', v.val))) AS sum_value,
    COUNT(JSON_EXTRACT(js, CONCAT('$.', v.val))) AS count_data
FROM t
CROSS JOIN (
    SELECT 'a' val UNION ALL SELECT'b' UNION ALL SELECT'c' UNION ALL SELECT'd'
) v
GROUP BY v.val   

DB Fiddle에 대한 데모:

| val | average | max_value | min_value | sum_value | count_data |
| --- | ------- | --------- | --------- | --------- | ---------- |
| a   | 1.5     | 2         | 1         | 3         | 2          |
| b   | 6.3333  | 8         | 1         | 19        | 3          |
| c   | 20.5    | 21        | 20        | 41        | 2          |
| d   | 7       | 7         | 7         | 7         | 1          |

태그 값의 범위가 다음과 같은 경우a로.z한 가지(가능하지만 효과적인) 솔루션은 하위 쿼리를 더 많이 확장하는 것입니다.UNION ALL SELECTs.

언급URL : https://stackoverflow.com/questions/54855588/how-group-key-json-sum-and-dynamically