mysql - 多分组SQL,点击和用户计数错误

标签 mysql sql count group-by

我试图获取我网站的点击/用户数量,为此我有他们的 cookie ID 和日期。但从我到目前为止编写的查询中,我收到以下错误

表格

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

如果我确实喜欢下面的查询

"INSERT INTO visitos SELECT cookieid,date FROM ",@tab," GROUP BY cookieid"

这通过正确计数给出了正确的点击/用户计数,但它忽略了日期,根据上表,它会告诉您 2011-03-17 => 4 次点击/2 名唯一访问者,但它忽略了点击/访问20 号,并且没有给出 20 号的计数。因为 cookie id 重复

用另一种方式

"INSERT INTO visitos SELECT cookieid,date FROM ",@tab," GROUP BY date"

它将给出所有点击/访问的日期,但计数结果是错误的, 它将告诉 2011-03-17 => 4 次点击/4 名唯一访问者,通过将每次点击作为唯一用户获取,同时忽略 cookie id

任何人都可以帮助我编写 SQL 查询来同时按 cookie id 和日期对其进行分组

P.S "INSERT INTO visitos SELECT cookieid,date FROM ",@tab," GROUP BY date,cookieid"

也没用

存储过程

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$$

最佳答案

试试这个

“插入访问日期,计数(cookie_id)no_of_clicks,计数(不同的cookie_id)no_of_visitors来自”,@tab,“按日期分组”

关于mysql - 多分组SQL,点击和用户计数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26292559/

相关文章:

tree - Lisp 抛硬币正面序列

excel - 寻找使用 SUM PRODUCT 和 COUNTIF 的更有效方法

mysql - 在 MySQL 中以特定用户身份进行身份验证

mysql - 如何将记录复制到表中,但如果它们已经存在则不复制

sql - 在 Postgres View 中折叠联合的结果

mysql - 4 表 SQL 连接问题

mysql - 如何查询 2 个 SQL 表并使用 1 个查询更改数据

bash - 比较两个文件并显示字符串重复出现的次数

php - MySQL 触发器会比 php 更快地检查 20 多行吗?

MySQL 在多个表中选择不同的值