-1
如題,有一個數據如下:MariaDB 5.5如何統計json中的重複值?
|ID|jsoncolumn|
|01|{'01':'pass','01':'pass','02':'pass','03':'pass','03':'pass','03':'pass'} |
任何一個知道如何計算重複的值,比如ID 01有2個字ID 03有3個計數
如題,有一個數據如下:MariaDB 5.5如何統計json中的重複值?
|ID|jsoncolumn|
|01|{'01':'pass','01':'pass','02':'pass','03':'pass','03':'pass','03':'pass'} |
任何一個知道如何計算重複的值,比如ID 01有2個字ID 03有3個計數
下面的腳本可以給你一些想法。由於表格可能具有的行數,評估性能問題等等。修改並調整腳本中所需的所有內容:
MariaDB[_]> DROP TEMPORARY TABLE IF EXISTS `tmp_tbl`;
Query OK, 0 rows affected, 1 warning (0.00 sec)
MariaDB[_]> DROP TABLE IF EXISTS `tbl`;
Query OK, 0 rows affected, 1 warning (0.00 sec)
MariaDB[_]> CREATE TABLE IF NOT EXISTS `tbl` (
-> `id` SERIAL,
-> `jsoncolumn` BLOB
->);
Query OK, 0 rows affected (0.00 sec)
MariaDB[_]> CREATE TEMPORARY TABLE IF NOT EXISTS `tmp_tbl` (
-> `id` BIGINT,
-> `value` VARCHAR(255)
->);
Query OK, 0 rows affected (0.00 sec)
MariaDB[_]> INSERT INTO `tbl`
-> (`jsoncolumn`)
-> VALUES
-> ("{'01':'pass','01':'pass','02':'pass','03':'pass','03':'pass','03':'pass'}");
Query OK, 1 row affected (0.00 sec)
MariaDB[_]> SELECT
-> CONCAT('(', `id`, ', "',
-> REPLACE(
-> REPLACE(
-> REPLACE(`jsoncolumn`, '}', ''),
-> '{', ''),
-> ',', CONCAT('"), (', `id`, ', "')
-> ), '")'
-> ) INTO @`_value`
-> FROM `tbl`
-> WHERE `id` = 1;
Query OK, 1 row affected (0.00 sec)
MariaDB[_]> SET @`insert` := CONCAT('
'> INSERT INTO `tmp_tbl` (`id`, `value`)
'> VALUES ', @`_value`);
Query OK, 0 rows affected (0.00 sec)
MariaDB[_]> SELECT @`insert`;
+-------------------------------------------------------------------------------------------------------------------------------+
| @`insert` |
+-------------------------------------------------------------------------------------------------------------------------------+
| INSERT INTO `tmp_tbl` (`id`, `value`)
VALUES (1, "'01':'pass'"), (1, "'01':'pass'"), (1, "'02':'pass'"), (1, "'03':'pass'"), (1, "'03':'pass'"), (1, "'03':'pass'") |
+-------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
MariaDB[_]> PREPARE `stmt` FROM @`insert`;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
MariaDB[_]> EXECUTE `stmt`;
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0
MariaDB[_]> DEALLOCATE PREPARE `stmt`;
Query OK, 0 rows affected (0.00 sec)
MariaDB[_]> SELECT `id`, `value`, COUNT(`id`) `COUNT`
-> FROM `tmp_tbl`
-> GROUP BY `id`, `value`, LEFT(`value`, LOCATE(':', `value`) - 1)
-> ORDER BY `value`;
+------+-------------+-------+
| id | value | COUNT |
+------+-------------+-------+
| 1 | '01':'pass' | 2 |
| 1 | '02':'pass' | 1 |
| 1 | '03':'pass' | 3 |
+------+-------------+-------+
3 rows in set (0.00 sec)
MariaDB[_]> DROP TEMPORARY TABLE IF EXISTS `tmp_tbl`;
Query OK, 0 rows affected (0.00 sec)
MariaDB[_]> DROP TABLE IF EXISTS `tbl`;
Query OK, 0 rows affected (0.00 sec)
請參閱dbfiddle。
JSON不是存儲您想要爲其執行查詢的東西的地方。 –