[mysql] MySQL COUNT DISTINCT

어제 내 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)

어떤 이유로 이것은 동일한 사이트 ID로 여러 결과를 가져 오는 것입니다 …. 어떻게 구별되는 site_id cp 로그인 만 가져오고 계산합니까?



답변

 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


답변

사무용 겉옷

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당신이 후입니다.


답변

group by 절을 사용해야합니다.

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


답변