Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果唯一,则每月计数_Mysql_Sql_Phpmyadmin - Fatal编程技术网

Mysql 如果唯一,则每月计数

Mysql 如果唯一,则每月计数,mysql,sql,phpmyadmin,Mysql,Sql,Phpmyadmin,我正在尝试获取一个SQL查询,以统计当月唯一的personid,如果他们没有当月的“New”记录,则是“Returning”访问者 month | personid | visitstat --------------------------------- January john new January john returning January Bill returning 因此,我要查找的查询应该为

我正在尝试获取一个SQL查询,以统计当月唯一的personid,如果他们没有当月的“New”记录,则是“Returning”访问者

month |    personid   | visitstat
---------------------------------
January     john          new
January     john          returning
January     Bill          returning
因此,我要查找的查询应该为每个具有“returning”的唯一personid获取计数,除非该personid也存在“new”——在本例中,为每个personid返回一个
count

1月份退票

因为约翰这个月是新来的

我试过的问题是

选择COUNT(不同的personid)作为访问信息中的COUNT,其中visitstat='Returning'GROUP BY MONTH(date)ORDER BY date

不幸的是,即使该人在该月有“新”记录,这也算作“返回”

提前谢谢,希望我解释得足够清楚

你自己已经写下了“存在”这个神奇的词。您可以准确地使用它,一个
不存在
和一个相关子查询

SELECT count(DISTINCT vi1.personid) count
       FROM visit_info vi1
       WHERE vi1.visitstat = 'Returning'
             AND NOT EXISTS (SELECT *
                                    FROM visit_info vi2
                                    WHERE vi2.personid = vi1.personid
                                          AND year(vi2.date) = year(vi1.date)
                                          AND month(vi2.date) = month(vi1.date)
                                          AND vi2.visitstat = 'New')
       GROUP BY year(vi1.date),
                month(vi1.date)
       ORDER BY year(vi1.date),
                month(vi1.date);

我还建议将年份包含在
GROUP BY
表达式中,否则当数据跨越一年以上时,您可能会得到意外的结果。也只能使用
GROUP BY
子句中包含的表达式或传递给
ORDER BY
子句中的聚合函数的表达式。MySQL,与几乎任何其他DBMS不同,可能会接受其他DBMS,但也可能产生奇怪的结果。

我也遇到了与处理数据库相同的情况。我可能使用的方法是将GROUPBY与having子句和子查询一起使用

它不是一个很大的数据集,是吗?它比我包含的要多,但我想如果包含在这里,会是一团混乱。这一个有效,另一个也有效。它们是否无论如何都要使其不从中提取值的行填充为null?谢谢