MySQL COUNT DISTINCT

Mik*_*ike 139 mysql

我试图在昨天收集我的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)
Run Code Online (Sandbox Code Playgroud)

出于某种原因,这是使用相同的站点ID提取多个结果....我如何只拉取和计算不同的site_id cp登录?

ype*_*eᵀᴹ 289

 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
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢SQL,因为你会遇到类似"我如何计算不同的用户ID"的问题,而答案就是"`Count(Distinct user_id)`" (8认同)

Ric*_*iwi 21

总体

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

或者每个站点

  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`
Run Code Online (Sandbox Code Playgroud)

time结果中包含列没有意义 - 因为您正在聚合行,显示一个特定的内容time是无关紧要的,除非它是您minmax之后.


Byr*_*ock 7

您需要使用group by子句.

SELECT  site_id, MAX(ts) as TIME, count(*) group by site_id
Run Code Online (Sandbox Code Playgroud)