You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计JSON列中嵌套数组voucherList的去重计数

统计JSON列中voucherList的去重凭证数量

先修正JSON格式

你提供的JSON示例存在语法错误,正确的对象格式应该是这样(外层用{}而非[]):

{"billinfo": [
    {
      "sortKey": "z",
      "voucherList": [
        "021121",
        "021122",
        "021123"
      ]
    }
  ]
}

以及

{"billinfo": [
    {
      "sortKey": "z",
      "voucherList": [
        "004077"
      ]
    },
    {
      "sortKey": "z",
      "voucherList": [
        "004076"
      ]
    }
  ]
}

针对不同数据库的实现方案

假设你的表名为your_table,JSON列名为record,以下是主流数据库的查询语句:

PostgreSQL(推荐用jsonb类型)

SELECT COUNT(DISTINCT voucher)
FROM your_table,
     jsonb_array_elements(record->'billinfo') AS bill,
     jsonb_array_elements(bill->'voucherList') AS voucher;
  • 逻辑:先展开billinfo数组得到每个账单对象,再展开每个对象里的voucherList数组得到单个凭证编号,最后对所有编号去重计数。

MySQL 8.0+

SELECT COUNT(DISTINCT voucher)
FROM your_table,
     JSON_TABLE(
       record,
       '$.billinfo[*].voucherList[*]' COLUMNS (voucher VARCHAR(20) PATH '$')
     ) AS jt;
  • 逻辑:用JSON_TABLE直接解析嵌套的JSON数组,把所有凭证编号提取到虚拟表,再去重统计数量。

注意事项

  • 必须保证JSON格式合法,否则会导致解析失败
  • 不同数据库的JSON处理函数有差异,需根据实际使用的数据库调整语句

内容的提问来源于stack exchange,提问作者Diksha Chaudhary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:50:36