source

MariaDB: JSON의 합계값

goodcode 2022. 11. 5. 11:36
반응형

MariaDB: JSON의 합계값

JSON 스니펫의 특정 값을 다음 예와 같이 정리합니다.

set @json='
{
  "items": [
    {
      "a": {
        "a_amount": "0.0020095"
      },
      "b": {
        "b_amount": "0.0004"
      }
    },
    {
      "a": {
        "a_amount": "0.02763081"
      },
      "b": {
        "b_amount": "0.0055"
      }
    }
  ]
}';

모두 합산해야 합니다.a.a_amount그리고 모든 것b.b_amount혼자서도 할 수 있는 그런 걸 하고 싶어요.SUM(a.a_amount)그리고.SUM(b.b_amount).

그러나 저는 다음과 같은 각각의 가치를 추출하는 것 외에는 더 이상 진전되지 않았습니다.

SELECT JSON_EXTRACT(@json, '$.items[*].a.a_amount') AS sum_a,
       JSON_EXTRACT(@json, '$.items[*].b.b_amount') AS sum_b;
sum_a sum_b
["0.0020095", "0.02763081"] ["0.0004", "0.0055"]

만지작거리고 있다JSON_EXTRACT(),JSON_VALUE()그리고 심지어ha_connect플러그인은 아직 필요한 금액을 얻을 수 있는 SQL 코드를 생각해내지 못했습니다.

누가 날 도와줄까?

하나의 옵션은 재귀 CTE와 함께 DUBLE 변환을 사용하는 것입니다.JSON_EXTRACT()등의 기능

WITH RECURSIVE cte AS
(
SELECT 0 i
UNION ALL
SELECT i + 1 i
  FROM cte
 WHERE i + 1 <= ( SELECT JSON_LENGTH(json) FROM j )  
)
SELECT SUM(CAST(JSON_EXTRACT(json, CONCAT('$.items[',i,'].a.a_amount')) AS DOUBLE)) AS sum_a,
       SUM(CAST(JSON_EXTRACT(json, CONCAT('$.items[',i,'].b.b_amount')) AS DOUBLE)) AS sum_b
  FROM cte,
       j
sum_a sum_b
0.02964031 0.0059

Demo

JSON 테이블 기능이 도움이 될 수 있습니다.다음은 데이터에 대한 작은 예입니다.데이터 타입을 조금 조작해야 할 수도 있습니다.

SELECT 
  SUM(a_amount), 
  SUM(b_amount) 
FROM
(
  SELECT * FROM 
  JSON_TABLE(@json, '$.items[*]' COLUMNS(
      a_amount FLOAT PATH '$.a.a_amount',
      b_amount FLOAT PATH '$.b.b_amount'
    )
  ) as items
) as temp;
SUM(a_금액) SUM(b_mount)
0.029640309745445848 0.005899999960092828

DB Fielen 보기

언급URL : https://stackoverflow.com/questions/70568219/mariadb-sum-values-from-json

반응형