मैं आपके प्रश्न को इस प्रकार समझता हूं। 01.01.2018-12.01.2018 की अवधि में आपके 3 उपयोगकर्ता (user_id=1,2,3) लॉगिन थे। उन उपयोगकर्ताओं में से, user_id 1 ने कुल 250 भुगतान किए, user_id 2 ने 40 का 1 भुगतान किया, और user_id 3 ने 0 भुगतान किए, इसलिए उनका कुल 0 है। इसलिए 0-200
श्रेणी में 2 मान हैं। , और 1 श्रेणी में 200 +
. यदि यह सही समझ है, तो यह प्रश्न आपको वांछित परिणाम देगा:
SELECT CASE
WHEN amount < 200 THEN '0-200'
WHEN amount >= 200 THEN '200 +'
END AS diapason,
COUNT(*) AS number_of_users
FROM (SELECT a.user_id, COALESCE(SUM(p.amount), 0) AS amount
FROM activity a
LEFT JOIN payments p ON p.user_id = a.user_id
WHERE a.login_time BETWEEN '01.01.2018' AND '12.01.2018'
GROUP BY a.user_id) p
GROUP BY diapason;
आउटपुट:
diapason number_of_users
0-200 2
200 + 1
अपडेट करें
कुल number_of_users
. के साथ एक और पंक्ति जोड़ने के लिए , बस WITH ROLLUP
जोड़ें GROUP BY
. को खंड:
SELECT CASE
WHEN amount < 200 THEN '0-200'
WHEN amount >= 200 THEN '200 +'
END AS diapason,
COUNT(*) AS number_of_users
FROM (SELECT a.user_id, COALESCE(SUM(p.amount), 0) AS amount
FROM activity a
LEFT JOIN payments p ON p.user_id = a.user_id
WHERE a.login_time BETWEEN '01.01.2018' AND '12.01.2018'
GROUP BY a.user_id) p
GROUP BY diapason WITH ROLLUP
आउटपुट:
diapason number_of_users
0-200 2
200 + 1
(null) 3
अपने आवेदन ढांचे में आप इस तथ्य का उपयोग कर सकते हैं कि diapason
मान NULL
है कुछ आउटपुट करने के लिए जैसे Total
इसके बजाय।
आप MySQL में भी ऐसा कर सकते हैं (इसे देखें SQLFiddle
) इस क्वेरी को एक सबक्वेरी के रूप में लपेटकर और COALESCE
. का उपयोग करके diapason
. पर कॉलम। उस स्थिति में आउटपुट होगा:
diapason number_of_users
0-200 2
200 + 1
Total 3