作为标题,有如下数据:
|ID|jsoncolumn|
|01|{'01':'pass','01':'pass','02':'pass','03':'pass','03':'pass','03':'pass'} |
任何人都知道如何计算重复值如ID 01有2个计数ID 03有3个计数
答案 0 :(得分:0)
以下脚本可以为您提供一些想法。由于您的表可以拥有的行数,因此可以评估性能问题。修改并调整脚本中所需的所有内容:
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。