2011-04-20 21 views
107

मैं कल अपने सीपी में अलग-अलग यात्राओं की संख्या एकत्र करने की कोशिश कर रहा हूं, फिर उन्हें गिनें।MySQL COUNT DISTINCT

SELECT 
    DISTINCT `user_id` as user, 
    `site_id` as site, 
    `ts` as time 
FROM 
    `cp_visits` 
WHERE 
    ts >= DATE_SUB(NOW(), INTERVAL 1 DAY) 

किसी कारण इस एक ही साइट आईडी के साथ एक से अधिक परिणाम खींच रहा है के लिए .... मैं केवल कैसे खींच सकते हैं और अलग site_id सीपी लॉगिन गिनते हैं?

उत्तर

229
Select 
    Count(Distinct user_id) As countUsers 
    , Count(site_id) As countVisits 
    , site_id As site 
From cp_visits 
Where ts >= DATE_SUB(NOW(), INTERVAL 1 DAY) 
Group By site_id 
7

आपको क्लॉज द्वारा समूह का उपयोग करने की आवश्यकता है।

SELECT site_id, MAX(ts) as TIME, count(*) group by site_id 
17

कुल मिलाकर

SELECT 
     COUNT(DISTINCT `site_id`) as distinct_sites 
    FROM `cp_visits` 
WHERE ts >= DATE_SUB(NOW(), INTERVAL 1 DAY) 

या साइट

SELECT 
     `site_id` as site, 
     COUNT(DISTINCT `user_id`) as distinct_users_per_site 
    FROM `cp_visits` 
    WHERE ts >= DATE_SUB(NOW(), INTERVAL 1 DAY) 
GROUP BY `site_id` 

परिणाम में time स्तंभ होने मतलब नहीं है प्रति - जब से तुम, पंक्तियों के योग कर रहे हैं एक दिखा विशेष time अप्रासंगिक है, जब तक यह min यानहीं है 210 आप के बाद हैं।

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