असंभव नहीं, बस उलझा हुआ। आप का उपयोग कर सकते हैं STR_TO_DATE
अपने स्ट्रिंग्स को DATETIME
. में बदलने के लिए ऑब्जेक्ट, जिससे आप तब उपयोग कर सकते हैं MONTH
महीने की संख्या प्राप्त करने के लिए। हालांकि ध्यान दें (जैसा कि @DRapp ने टिप्पणी की थी) कि आपको DATETIME
storing स्टोर करना चाहिए मूल्यों को उनके मूल रूप में, VARCHAR
. के रूप में नहीं , तो आपको STR_TO_DATE
. से निपटने की आवश्यकता नहीं होगी . महीने की संख्या प्राप्त करने के बाद, आप अपने इच्छित परिणाम प्राप्त करने के लिए सशर्त एकत्रीकरण का उपयोग कर सकते हैं:
SELECT name,
COALESCE(AVG(CASE WHEN mth = 1 THEN PTS END), 0) AS Jan,
COALESCE(AVG(CASE WHEN mth = 2 THEN PTS END), 0) AS Feb,
COALESCE(AVG(CASE WHEN mth = 3 THEN PTS END), 0) AS Mar,
COALESCE(AVG(CASE WHEN mth = 4 THEN PTS END), 0) AS Apr,
-- repeat for May to November
COALESCE(AVG(CASE WHEN mth = 12 THEN PTS END), 0) AS `Dec`,
AVG(PTS) AS AVG
FROM (
SELECT name, PTS AS PTS, MONTH(STR_TO_DATE(DATE, '%a %b %e %H:%i:%s %Y')) AS mth
FROM data
) d
GROUP BY name
आउटपुट (आपके नमूना डेटा के लिए):
name Jan Feb Mar Apr Dec AVG
Chris 0 4 0 2 0 3
John 0 0 0 2.6667 0 2.6667