Ответ 1
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
Я пытаюсь собрать количество различных посещений в моем вчерашнем 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?
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