MySQL SAYISI İLÇESİ


144

Dün cp'deki farklı ziyaretleri toplamayı ve sonra saymayı deniyorum.

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

Nedense bu aynı site kimliği ile birden çok sonuç çekiyor .... nasıl sadece farklı site_id cp girişleri çekmek ve saymak?

Yanıtlar:


299
 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

17
SQL'i seviyorum çünkü "Farklı kullanıcı kimliklerini nasıl sayabilirim" gibi soruları alırsınız ve cevap sadece " Count(Distinct user_id)" dir
Tim

23

tüm

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

Veya site başına

  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`

timeSonuçta sütuna sahip olmak mantıklı değildir - satırları topladığınız için, belirli bir timeşeyi göstermek, minveya maxsiz peşinde değilseniz , önemsizdir .


7

Bir maddeyi bir grup kullanmanız gerekir.

SELECT  site_id, MAX(ts) as TIME, count(*) group by site_id
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.