Ik zie geen goede reden waarom je hier JSON gebruikt. Het is ook niet duidelijk waarom u denkt dat een "nosql-schema " binnen MySQL zou alles beter doen.
Wat je waarschijnlijk nodig hebt is zoiets als dit:
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)
);
Dit zal uw vragen vereenvoudigen. Het INSERT-statement ziet er als volgt uit:
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);
Het SELECT-statement zou er ongeveer zo uit kunnen zien
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;
Merk op dat ik niet heb geprobeerd de tabel/het schema te optimaliseren voor gegevensgrootte en prestaties. Dat zou een andere vraag zijn. Maar je moet zien dat de zoekopdrachten nu veel eenvoudiger zijn.