139 votes

MySQL COUNT DISTINCT

Je suis en train de collecter le nombre de visites distinctes dans mon pc hier, alors les compter.

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

Pour certaines raisons, c'est en tirant plusieurs résultats avec le même id de site....comment puis-je seulement tirer et de compter les distincts site_id cp connexions?

289voto

ypercube Points 62714
 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

21voto

RichardTheKiwi Points 58121

Ensemble

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

Ou par site

  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`

Avoir l' time colonne dans le résultat ne fait pas de sens - depuis que vous êtes à l'agrégation des lignes, montrant l'un particulier time n'est pas pertinent, sauf si c'est l' min ou max vous êtes après.

7voto

Byron Whitlock Points 29863

Vous avez besoin d'utiliser une clause group by.

SELECT  site_id, MAX(ts) as TIME, count(*) group by site_id

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X