1

毎日のユニークな訪問者数を調べる必要があり、次のようなデータベースがあります。

UID   clicks date
6046    9   2013-03-06
6449    7   2013-03-06
6450    41  2013-03-06
664     2   2013-03-07
2432    36  2013-03-07
3246    11  2013-03-07
6031    52  2013-03-07

今私が見つける必要があるのは、毎日のユニークな訪問者数です。その日のクリック数の合計とともにこれを見つけています。したがって、クエリは次のようになります。

SELECT date,SUM(clicks) as new_clicks,COUNT(DISTINCT uID) as unique_clicks 
FROM uc_user 
WHERE date <='2013-03-15' GROUP BY date;

しかし、ここで私は間違った結果を得ています。カウントは、同じ間隔で計算したカウントとは異なります

SELECT date, COUNT(DISTINCT uID ) AS unique_clicks
FROM uc_user
WHERE date <= '2013-03-15'
GROUP BY date
LIMIT 0 , 30

これらのクエリと、ユニーク ユーザー数を表示するのに正しいクエリの違いは何ですか?

実際、PHPでの私の実際のクエリは次のようなものです:

 SELECT date,SUM(clicks) as new_clicks,COUNT(uID) as unique_clicks 
 FROM currencyclick_user 
 WHERE date BETWEEN '$from' AND '$to' 
 GROUP BY date

 SELECT SUM(clicks) as total_new_clicks,
        COUNT(DISTINCT uID) as total_new_uniqueclicks  
 FROM currencyclick_user 
 WHERE date BETWEEN '$from' AND '$to'

しかし、同じ範囲でも異なる値を示しています。合計クエリが、最初のクエリでカウントを追加して得た値よりも間違った合計を表示していることを意味します。

4

2 に答える 2

0

範囲内の一意の訪問の合計数を見つけるには、このクエリを試してください

SELECT  SUM(clicks) totalClicks,
    count(distinct UID) totalUnique
FROM
(
    SELECT UID,dtm,clicks
    FROM    currencyclick_user 
    WHERE   dtm BETWEEN '2013-03-06' AND '2013-03-07' 
) as allclicks
于 2013-03-15T12:28:44.783 に答える
0

質問を更新したため、質問の最下部にある 2 つのクエリは大きく異なります。最初のクエリではレコードを日付でグループ化し、2 番目のクエリではグループ化しなかったためです。最初のクエリは日ごとに異なるレコードを返しますが、グループ化する列のクエリを指定していないため、2 番目のクエリは 1 つのレコードのみを返します。

GROUP BY 句を含まないステートメントでグループ関数を使用すると、すべての行をグループ化することと同じになります。


更新 1

SELECT  SUM(new_clicks) totalClicks,
        SUM(unique_clicks) totalUnique
FROM
    (
        SELECT  date,
                SUM(clicks) as new_clicks,
                COUNT(uID) as unique_clicks 
        FROM    currencyclick_user 
        WHERE   date BETWEEN '$from' AND '$to' 
        GROUP   BY date
    ) subQ
于 2013-03-15T12:05:09.283 に答える