Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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_Group By - Fatal编程技术网

Mysql 为什么我通过子查询的结果得到错误组?

Mysql 为什么我通过子查询的结果得到错误组?,mysql,sql,group-by,Mysql,Sql,Group By,我想找到具有相同电话、项目id、创建时间、跟踪内容的跟踪记录数 但是这个sql: 从跟踪中选择count1,其中DATEcreate_time=2020-01-16和 我不在 从跟踪中选择id,其中DATEcreate\u time=2020-01-16 通过电话分组、项目id、创建时间、跟踪内容 ; 返回错误的结果。 如果我使用: 从跟踪中选择count1,其中DATEcreate_time=2020-01-16和 我不在 从中选择id 从跟踪中选择id,其中DATEcreate\u time

我想找到具有相同电话、项目id、创建时间、跟踪内容的跟踪记录数

但是这个sql:

从跟踪中选择count1,其中DATEcreate_time=2020-01-16和 我不在 从跟踪中选择id,其中DATEcreate\u time=2020-01-16 通过电话分组、项目id、创建时间、跟踪内容 ; 返回错误的结果。 如果我使用:

从跟踪中选择count1,其中DATEcreate_time=2020-01-16和 我不在 从中选择id 从跟踪中选择id,其中DATEcreate\u time=2020-01-16 通过电话分组、项目id、创建时间、跟踪内容 A. ; 返回正确的结果。 Mysql版本是5.6.26 谁能告诉我原因吗

例如,该表包含以下数据:

id=1,项目id=1,电话=1,追踪竞赛=test,创意时间=2020-01-16 18:27:46

id=2,项目id=1,电话=1,追踪竞赛=test,创作时间=2020-01-16 18:27:46

id=3,项目id=2,电话=2,跟踪竞赛=test1,创建时间=2020-01-16 18:22:27


第一个sql返回0,第二个sql返回1实际上这两个查询都是错误的:您正在选择id,但它不是group by子句的一部分,因此您基本上从组中获得一个随机值。在大多数RDBMS和MySQL的非旧版本中,这会产生语法错误

我知道您想计算表中多次出现的电话、项目id、创建时间、跟踪内容的数量

您可以为此使用两个聚合级别:

select count(*) cnt_duplicates
from (
    select 1
    from mytable
    where create_time >= '2020-01-16' and create_time < '2020-01-17'
    group by telephone, project_id, create_time, trace_content
    having count(*) > 1
) t
内部查询组记录和筛选发生在多个查询组上的查询。外部查询统计内部查询返回的记录数


请注意,我在日期重写了您的条件,以便它可以利用创建时间的索引(如果有)。

您的选择id。。。分组方式。。。子查询返回随机ID-每个组的所有可能ID之一。第二个查询返回正确结果的事实也是随机的。@Akina可能这不是子查询返回随机id的原因。如果我使用EXPLAIN命令,第一个sql只显示使用where的子查询,而不显示使用filesort和使用TEMPARY。但是第二个sql使用where、filesort和temporary@user12730122:不清楚您想做什么,但您的查询可能会被重写。请提供样本数据和预期结果。不同的计划==不同的随机值。尽管如此,您的正确结果是随机的,明天可能会出错。@GMB我添加了示例数据和结果,我想要第一个sql返回1次,但我仍然想知道为什么第一个sql返回错误的结果。由于我没有将sql模式设为严格的转换表,因此在这种模式下,my group by sql返回第一次搜索的data@user12730122:它返回一个随机记录…换句话说,不能保证两次不同的查询执行将产生相同的结果。Id是主键,我认为Id是否随机并不重要,我只想知道数字