QUẬN HUYỆN MySQL


144

Tôi đang cố gắng thu thập số lượt truy cập khác nhau trong cp của mình ngày hôm qua, sau đó đếm chúng.

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

Vì một số lý do, điều này đang kéo nhiều kết quả với cùng một id trang web .... làm thế nào để tôi chỉ kéo và đếm các thông tin đăng nhập cp của trang web khác nhau?

Câu trả lời:


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
Tôi yêu SQL vì bạn nhận được các câu hỏi như "Làm cách nào để tôi đếm ID người dùng riêng biệt" và câu trả lời chỉ là " Count(Distinct user_id)"
Tim

23

Nhìn chung

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

Hoặc mỗi trang web

  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`

timecột trong kết quả không có ý nghĩa - vì bạn đang tổng hợp các hàng, hiển thị một hàng cụ thể timelà không liên quan, trừ khi đó là minhoặc maxbạn đang theo sau.


7

Bạn cần sử dụng một nhóm theo mệnh đề.

SELECT  site_id, MAX(ts) as TIME, count(*) group by site_id
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.