MySQL COUNT DISTINCT

146

Я пытаюсь собрать вчерашнее количество отдельных посещений в моем ЦП, а затем подсчитать их.

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?

Майк
источник

Ответы:

300
 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
ypercubeᵀᴹ
источник
18
Мне нравится SQL, потому что вы получаете вопросы вроде «Как подсчитать разные идентификаторы пользователей», и ответ - просто « Count(Distinct user_id)»
Тим
24

В общем и целом

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вы после.

RichardTheKiwi
источник
7

Вам нужно использовать предложение group by.

SELECT  site_id, MAX(ts) as TIME, count(*) group by site_id
Байрон Уитлок
источник