ROZRÓŻNIENIE LICZBY MySQL


144

Próbuję zebrać liczbę różnych wizyt wczoraj w moim CP, a następnie je policzyć.

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

Z jakiegoś powodu jest to pobieranie wielu wyników z tym samym identyfikatorem witryny ... jak mogę tylko pobrać i policzyć różne loginy cp site_id?

Odpowiedzi:


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
Uwielbiam SQL, ponieważ otrzymujesz pytania typu „Jak liczyć różne identyfikatory użytkowników”, a odpowiedź brzmi „ Count(Distinct user_id)
Tim

23

Ogólny

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

Lub na stronę

  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`

Umieszczenie timekolumny w wyniku nie ma sensu - ponieważ agregujesz wiersze, pokazanie jednego szczegółu timejest nieistotne, chyba że chodzi o minlub o maxciebie.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.