2015-12-14 18 views
7

मैं किसी विशेष ए/बी परीक्षण संयोजन के लिए प्रत्येक दिन विज़िट की संख्या और रूपांतरणों की संख्या पुनर्प्राप्त करने का प्रयास कर रहा हूं। प्रत्येक संयोजन ए/बी परीक्षण की एक अलग भिन्नता का प्रतिनिधित्व करता है। यहां मैं भिन्नताओं का प्रतिनिधित्व करने के लिए केवल '1' और '2' का उपयोग कर रहा हूं, लेकिन तकनीकी रूप से और अधिक भिन्नताएं हो सकती हैं।मैं 2 एसक्यूएल प्रश्नों को कैसे जोड़ सकता हूं और संचयी गणना कैसे प्राप्त कर सकता हूं?

मैंने निम्नलिखित 2 प्रश्न लिखे हैं, जो स्वतंत्र रूप से काम करते हैं। क्या इन्हें गठबंधन करना या एक प्रश्न पूछना संभव है जो मुझे इच्छित डेटा को पुनर्प्राप्त करता है?

दौरा क्वेरी:

SELECT DATE(visit.created), visit.combination, COUNT(visit.id) 
FROM visit 
WHERE visit.user_id = 6 
AND visit.experiment_id = 1 
GROUP BY DATE(visit.created), visit.combination 

दौरा परिणाम:

enter image description here

रूपांतरण क्वेरी:

SELECT DATE(conversion.created), conversion.combination, COUNT(conversion.id) 
FROM conversion 
WHERE conversion.user_id = 6 
AND conversion.experiment_id = 1 
AND conversion.goal_id = 1 
GROUP BY DATE(conversion.created), conversion.combination 

रूपांतरण परिणाम:

conversions result

यह भी अच्छा होगा अगर मैं एक रनिंग कुल (संचयी) गणना प्राप्त कर सकूं, जैसा कि नीचे दिया गया है, अंतिम 2 कॉलम देखें। मैं संयोजन के द्वारा नीचे दी गई तालिका समूहीकृत किया है तो संचयी गिनती को समझना आसान कर रहे हैं:

+---------------+-------------+----------------------+-----------------+--------------+--------------+ 
| DATE(created) | combination | COUNT(conversion.id) | COUNT(visit.id) | cumulative_c | cumulative_v | 
+---------------+-------------+----------------------+-----------------+--------------+--------------+ 
| 2015-11-17 | 1   |     1 |    3 |   1 |   3 | 
| 2015-11-18 | 1   |     7 |    4 |   8 |   7 | 
| 2015-11-19 | 1   |     3 |    8 |   11 |   15 | 
| 2015-11-17 | 2   |     4 |    1 |   4 |   1 | 
| 2015-11-18 | 2   |     2 |    6 |   6 |   7 | 
| 2015-11-19 | 2   |     9 |    6 |   15 |   13 | 
+---------------+-------------+----------------------+-----------------+--------------+--------------+ 

डेटाबेस स्कीमा:

enter image description here

उत्तर

4

संयोजन काफी सरल है: 0-मूल्य स्तंभ जोड़ें UNION_ALL समूह फिर से करते हैं, तो और योग।

SELECT dt, combination, SUM(v_count) as v_count, SUM(c_count) as c_count 
FROM 
(
SELECT DATE(visit.created) as dt, visit.combination as combination, COUNT(visit.id) as v_count, 0 as c_count 
FROM visit 
WHERE visit.user_id = 6 
AND visit.experiment_id = 1 
GROUP BY DATE(visit.created), visit.combination 

UNION ALL 

SELECT DATE(conversion.created) as dt, conversion.combination as combination, 0 as v_count, COUNT(conversion.id) as c_count 
FROM conversion 
WHERE conversion.user_id = 6 
AND conversion.experiment_id = 1 
AND conversion.goal_id = 1 
GROUP BY DATE(conversion.created), conversion.combination 
) as t 
GROUP BY dt, combination 

अब कुल चलाने के लिए। अधिक उन्नत डीबीएमएस में इसे "विंडो" या "विश्लेषणात्मक" फ़ंक्शन कहा जाता है। ऊपर क्वेरी के लिए

SELECT dt, combination, SUM(v_count) OVER (PARTITION BY combination ORDER BY dt) as v_cumulative 

, और यह आपको देना होगा तुम सिर्फ क्या चाहते हैं: उदाहरण के लिए, Oracle में आप यह कर सकते हैं। हालांकि, MySQL में ऐसे फ़ंक्शन नहीं हैं। उदाहरण के लिए here और here वर्णित तरीके हैं, लेकिन वे काफी मुश्किल हैं।

+0

बहुत धन्यवाद टाइमकिल्लर :) यह काम करता है और मैं PHP में चल रहे कुल योग कर रहा हूं। मैंने कोशिश की लेकिन यह MySQL में प्रत्येक संयोजन के लिए चलने वाले योग करने के लिए तुच्छ दिखाई नहीं देता है, लेकिन लिंक के लिए धन्यवाद। – mattvick

0

मुझे आशा है कि यह मदद मिलेगी।

SELECT DATE(v.created), v.combination ,DATE(c.created), c.combination, COUNT(v.id), COUNT(c.id) FROM user u 
LEFT JOIN conversion c ON u.id = c.user_id 
LEFT JOIN visit v ON u.id = v.user_id 
WHERE c.id = 6 AND v.experiment_id = 1 AND c.goal_id = 1 
GROUP BY DATE(v.created), v.combination, DATE(c.created), c.combination 
+0

कृपया अपने उत्तर के लिए एक स्पष्टीकरण दें। – DanFromGermany

संबंधित मुद्दे

 संबंधित मुद्दे