Je ne vois pas de bonne raison pour laquelle vous utilisez JSON ici. On ne sait pas non plus pourquoi vous pensez qu'un "schéma nosql " dans MySQL ferait quelque chose de mieux.
Ce dont vous avez probablement besoin est quelque chose comme ceci :
CREATE TABLE TAG_COUNTER (
account varchar(36) NOT NULL,
time_id INT NOT NULL,
tag_name varchar(50) NOT NULL,
counter INT UNSIGNED NOT NULL,
PRIMARY KEY (account, time_id, tag_name)
);
Cela simplifiera vos requêtes. L'instruction INSERT ressemblerait à :
INSERT INTO TAG_COUNTER
(account, time_id, tag_name, counter)
VALUES
('google', 2018061023, 'tag1', 1),
('google', 2018061023, 'tag2', 1)
ON DUPLICATE KEY UPDATE counter = counter + VALUES(counter);
L'instruction SELECT pourrait ressembler à ceci
SELECT
SUBSTRING(time_id, 1, 6) AS month,
tag_name,
SUM(counter) AS counter_agg
FROM TAG_COUNTER
GROUP BY month, tag_name
ORDER BY month, counter_agg DESC;
Notez que je n'ai pas essayé d'optimiser la table/schéma pour la taille des données et les performances. Ce serait une autre question. Mais vous devez voir que les requêtes sont beaucoup plus simples maintenant.