在 MySQL 5.7 中,您可以使用 JSON 函数来处理和统计 JSON 数组中的特定值。以下是几种实现方法:
注意:MySQL 5.7 不支持 JSON_TABLE 函数,这是 MySQL 8.0 引入的功能。如果您使用的是 5.7,请参考下面的方法。
SELECT
id,
JSON_LENGTH(json_column) AS total_elements,
(
SELECT COUNT(*)
FROM (
SELECT 1
FROM JSON_TABLE(
JSON_ARRAY(1,2,3,2,2,4), -- 替换为您的JSON数组列
'$[*]' COLUMNS(
value INT PATH '$'
)
) AS jt
WHERE jt.value = 2 -- 替换为您要查找的值
) AS t
) AS count_of_value
FROM your_table;
DELIMITER //
CREATE FUNCTION count_json_array_value(json_array JSON, search_value VARCHAR(255))
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE count INT DEFAULT 0;
DECLARE array_length INT;
DECLARE current_value VARCHAR(255);
SET array_length = JSON_LENGTH(json_array);
WHILE i < array_length DO
SET current_value = JSON_UNQUOTE(JSON_EXTRACT(json_array, CONCAT('$[', i, ']')));
IF current_value = search_value THEN
SET count = count + 1;
END IF;
SET i = i + 1;
END WHILE;
RETURN count;
END //
DELIMITER ;
-- 使用示例
SELECT count_json_array_value(json_column, 'value_to_count') FROM your_table;
SELECT
id,
(LENGTH(json_column) - LENGTH(REPLACE(json_column, '"value_to_count"', ''))) / LENGTH('"value_to_count"') AS count
FROM your_table;
假设有一个表 products
包含 JSON 列 tags
,存储产品标签数组:
-- 创建示例表
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
tags JSON
);
-- 插入示例数据
INSERT INTO products (name, tags) VALUES
('Product 1', '["electronics", "sale", "new"]'),
('Product 2', '["clothing", "sale"]'),
('Product 3', '["electronics", "premium"]');
-- 统计包含"electronics"标签的产品数量
SELECT COUNT(*)
FROM products
WHERE JSON_CONTAINS(tags, '"electronics"');
-- 统计每个产品中"sale"标签出现的次数
SELECT
id,
name,
(LENGTH(tags) - LENGTH(REPLACE(tags, '"sale"', ''))) / LENGTH('"sale"') AS sale_count
FROM products;
希望这些方法能帮助您在 MySQL 5.7 中统计 JSON 数组中的特定值计数!