DISTINCT COUNT COUNT


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, тому що у вас виникають запитання на кшталт "Як я рахую різні ідентифікатори користувачів", а відповідь - це просто " 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ви після цього.


7

Вам потрібно використовувати групу за допомогою пункту.

SELECT  site_id, MAX(ts) as TIME, count(*) group by site_id
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.