키 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
| 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 SELECT
s.
언급URL : https://stackoverflow.com/questions/54855588/how-group-key-json-sum-and-dynamically
'programing' 카테고리의 다른 글
Python에서 데이터베이스 연결 시간 초과 설정 (0) | 2023.07.23 |
---|---|
파이썬에서 이름 망글링을 사용해야 합니까? (0) | 2023.07.23 |
계산 공식이 아닌 Excel 셀 값 읽기 -openpyxl (0) | 2023.07.23 |
커서가 오라클에서 레코드를 반환하는지 확인하는 방법은 무엇입니까? (0) | 2023.07.23 |
"x < y < z"가 "x < y and y < z"보다 빠릅니까? (0) | 2023.07.23 |