클릭 수/사용자 수를 내 웹 사이트에 알리려고 쿠키 ID와 날짜가 있습니다. 하지만 난 지금까지 작성한 쿼리에서 내가 얻을 다음과 같은 오류가다중 그룹화 SQL, 클릭 및 사용자 수가 잘못 계산 됨
테이블 카운트가 표시해야
cookieid date
--------------------
001 2011-03-17
001 2011-03-17
002 2011-03-17
001 2011-03-17
001 2011-03-20
002 2011-03-21
114 2011-03-21
114 2011-03-21
정확한 방법은 다음과 같습니다
on 2011-03-17 => 4 clicks/2 unique visitors
on 2011-03-20 => 1 click/1 unique visitor
on 2011-03-21 => 3 clicks/2 unique visitors
내가 아래처럼 할 경우 이 올바르게 BU 계산하여 클릭/사용자의 정확한 수를 제공
"INSERT INTO visitos SELECT cookieid,date FROM ",@tab," GROUP BY cookieid"
쿼리 위의 표에 따르면 날짜를 무시하므로 2011-03-17 => 4 클릭 수/순 방문자 수는 20이되지만 클릭 수/방문수는 20 회로 무시되며 20 번째로 계산되지 않습니다. 쿠키 ID가 다른 방법으로
을 반복하기 때문에
"INSERT INTO visitos SELECT cookieid,date FROM ",@tab," GROUP BY date"
그것은 모든 날짜를 줄 것이다 클릭/방문하지만, 계산의 결과는, 그것은 2011-03-17 => 4 잘못 말할 것이다있다 쿠키 ID를 무시하고 고유 한 사용자로 모든 클릭을 얻어서/4의 순 방문자를 클릭
사람은 모두 쿠키 ID와 한 번에 날짜
P.S "INSERT INTO visitos SELECT cookieid,date FROM ",@tab," GROUP BY date,cookieid"
에 의해 그룹이에 SQL 쿼리를 작성하는 나를 도울 수
중 하나
저장된 proceedure
BEGIN
SET @tab = CONCAT("monitortable_",pr);
DROP TABLE IF EXISTS uniquevisitors;
CREATE TEMPORARY TABLE uniquevisitors (`cookieid` INT, `date` DATETIME);
**SET @sqlstring = CONCAT("(PLACE WHERE GROUPING QUERY SHOULD TAKE PLACE)INSERT INTO uniquevisitors SELECT cookieid,date FROM ",@tab," GROUP BY cookieid");**
PREPARE stmt FROM @sqlstring;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
DROP TABLE IF EXISTS uniquevisitorscount;
CREATE TEMPORARY TABLE uniquevisitorscount (`cnt` INT, `dat` DATETIME);
INSERT INTO uniquevisitorscount SELECT COUNT(cookieid) AS cnt ,DATE(date) AS dat FROM uniquevisitors;
DROP TABLE IF EXISTS nonuniquevisitcount;
CREATE TEMPORARY TABLE nonuniquevisitcount (`cnt` INT, `dat` DATETIME);
SET @sqlstring = CONCAT("INSERT INTO nonuniquevisitcount SELECT COUNT(cookieid) AS cnt ,DATE(date) AS dat
FROM ",@tab," GROUP BY DATE_FORMAT(date, '%y'),DATE_FORMAT(date, '%m'),DATE_FORMAT(date, '%d')");
PREPARE stmt FROM @sqlstring;
EXECUTE stmt;
SELECT un.cnt AS ucnt, nu.cnt AS cnt, un.dat AS dat FROM uniquevisitorscount un JOIN nonuniquevisitcount nu ON un.dat = nu.dat;
END$$
당신은 당신의 질문을 다시 태그와 MySQL 또는 SQL-결정할 시겠어요 섬기는 사람? – bummi
그래서 COUNT()와 COUNT (DISTINCT)의 차이점은 무엇입니까? – Strawberry