Home
img of docs

如何在 MySQL 和 PostgreSQL 中使用函数和查询语句来统计字段存值的数组长度,并获取指定时间段内的记录数,包括使用 LENGTH、ARRAY_LENGTH和COUNT 函数等技术。

chou403

/ Database

/ c:

/ u:

/ 2 min read


一学一个不吱声

背景:需要查询一段时间内出现了多少次调用或推送了多少条数据。入参为 list 形式。

PostgreSQL

   select sum (json_array_length(input_param::json ->'body'->'jsonData')) from table;

sum(json_array_length(input_param::json ->'body'->'jsonData')) 的作用是对 JSON 数据中的数组长度求和。

含义分析

  1. 将 input_param 字段转换为 JSON 格式。
  2. 从 input_param 中提取 body 对象,再从 body 中提取 jsonData 数组。
  3. 计算 jsonData 数组的长度。
  4. 对每行数据的数组长度进行求和。

MySQL

在 MySQL 中,没有 json_array_length 函数,但可以使用 JSON_LENGTH 函数获取 JSON 数组的长度。将其语句转换为 MySQL 语法。

   SELECT SUM(JSON_LENGTH(JSON_EXTRACT(input_param, '$.body.jsonData'))) AS total_length FROM your_table;

含义分析

  1. JSON_EXTRACT(input_param, ‘$.body.jsonData’):从 input_param 字段中提取 body 对象的 jsonData 数组。
  2. JSON_LENGTH(…):计算提取到的 jsonData 数组的长度。
  3. SUM(…):将所有行的数组长度相加。

示例

input_param 的 JSON 数据如下:

   {
	"body": {
		"jsonData": [1, 2, 3]
	}
}

那么 JSON_LENGTH(JSON_EXTRACT(input_param, '$.body.jsonData')) 会返回 3(数组长度为 3)。通过 SUM 函数,可以对所有行的数组长度求和。