Не виждам основателна причина да използвате JSON тук. Също така не е ясно защо смятате, че „nosql схема " в MySQL би направило всичко по-добре.
Вероятно се нуждаете от нещо подобно:
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)
);
Това ще опрости вашите запитвания. Инструкцията INSERT би изглеждала така:
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);
Инструкцията SELECT може да е нещо подобно
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;
Имайте предвид, че не се опитах да оптимизирам таблицата/схемата за размера и производителността на данните. Това би бил друг въпрос. Но трябва да видите, че сега заявките са много по-прости.