ระยะห่าง MySQL นับ


144

ฉันพยายามรวบรวมจำนวนการเข้าชมที่แตกต่างใน cp ของฉันเมื่อวานแล้วนับ

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 cp ได้อย่างไร

คำตอบ:


299
 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

17
ฉันรัก SQL เพราะคุณได้รับคำถามเช่น "ฉันจะนับ ID ผู้ใช้ที่แตกต่างกันได้อย่างไร" และคำตอบก็คือ " Count(Distinct user_id)"
ทิม

23

ทั้งหมด

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หรือmaxคุณอยู่หลัง


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.