如何在 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 数据中的数组长度求和。
含义分析
- 将 input_param 字段转换为 JSON 格式。
- 从 input_param 中提取 body 对象,再从 body 中提取 jsonData 数组。
- 计算 jsonData 数组的长度。
- 对每行数据的数组长度进行求和。
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;
含义分析
- JSON_EXTRACT(input_param, ‘$.body.jsonData’):从 input_param 字段中提取 body 对象的 jsonData 数组。
- JSON_LENGTH(…):计算提取到的 jsonData 数组的长度。
- SUM(…):将所有行的数组长度相加。
示例
input_param 的 JSON 数据如下:
{
"body": {
"jsonData": [1, 2, 3]
}
}
那么 JSON_LENGTH(JSON_EXTRACT(input_param, '$.body.jsonData'))
会返回 3(数组长度为 3)。通过 SUM 函数,可以对所有行的数组长度求和。