155 Stimmen

MySQL COUNT DISTINCT

Ich versuche, die Anzahl der eindeutigen Besuche in meinem cp gestern zu sammeln und dann zu zählen.

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

Aus irgendeinem Grund ist dies ziehen mehrere Ergebnisse mit der gleichen Website-ID....wie kann ich nur ziehen und zählen die verschiedenen site_id cp Logins?

315voto

ypercubeᵀᴹ Punkte 109378
 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

26voto

RichardTheKiwi Punkte 102469

Insgesamt

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

Oder pro Standort

  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`

Mit der time Spalte im Ergebnis macht keinen Sinn - da Sie die Zeilen aggregieren, wird eine bestimmte time ist irrelevant, es sei denn, es ist die min ou max die Sie suchen.

7voto

Byron Whitlock Punkte 51063

Sie müssen eine Gruppenklausel verwenden.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X