मुझे कोई अच्छा कारण नहीं दिख रहा है, आप यहां 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
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;
ध्यान दें कि मैंने डेटा आकार और प्रदर्शन के लिए तालिका/स्कीमा को अनुकूलित करने का प्रयास नहीं किया। यह एक अलग सवाल होगा। लेकिन आपको यह देखना होगा कि प्रश्न अब बहुत आसान हो गए हैं।