mySQL GROUP BY和SELECT DISTINCT()如何影响相同值上的数据输出?

mySQL GROUP BY和SELECT DISTINCT()如何影响相同值上的数据输出?,mysql,group-by,distinct,Mysql,Group By,Distinct,更新编辑: DISTINCT或GROUP BY是否会任意使用查询中的其他字段来消除重复项或选择最上面的行,或以任何方式考虑ORDER BY? 我有一个monster查询,在这里我处理大量的连接表,我希望我可以发布整个内容,但它的专有部分必须足够,但这里有一个简化的示例-我试图弄清楚mySQL在基于以下类型的查询分组和输出行时到底在做什么(真正的东西大约有2页) 版本1-旨在消除ID2的重复记录 SELECT SQL_NO_CACHE SQL_CALC_FOUND_ROWS DISTINCT I

更新编辑: DISTINCT或GROUP BY是否会任意使用查询中的其他字段来消除重复项或选择最上面的行,或以任何方式考虑ORDER BY?

我有一个monster查询,在这里我处理大量的连接表,我希望我可以发布整个内容,但它的专有部分必须足够,但这里有一个简化的示例-我试图弄清楚mySQL在基于以下类型的查询分组和输出行时到底在做什么(真正的东西大约有2页)

版本1-旨在消除ID2的重复记录

SELECT SQL_NO_CACHE SQL_CALC_FOUND_ROWS 
DISTINCT ID1
, ID2
, ID2_Sequence
, DATE1
, DATE2
, <SECRET GUTS OMITTED>
GROUP BY ID2
ORDER BY DATE1 DESC
 *sometimes ORDER BY DATE2 DESC*
选择SQL\u NO\u缓存SQL\u计算\u FOUND\u行
不同ID1
,ID2
,ID2_序列
,日期1
,日期2
, 
按ID2分组
按日期订购1描述
*有时按日期2说明订购*
版本2-设计用于显示所有记录

SELECT SQL_NO_CACHE SQL_CALC_FOUND_ROWS 
DISTINCT ID1
, ID2
, ID2_Sequence
, DATE1
, DATE2
, <SECRET GUTS OMITTED>
GROUP BY ID1
ORDER BY DATE1 DESC
*sometimes ORDER BY DATE2 DESC*
选择SQL\u NO\u缓存SQL\u计算\u FOUND\u行
不同ID1
,ID2
,ID2_序列
,日期1
,日期2
, 
按ID1分组
按日期订购1描述
*有时按日期2说明订购*
有几个其他的连接是其中的一部分,但我认为这是它的要点。要解决的主要问题以及我们消除重复的原因是,有一对多的ID1到ID2和ID2基于ID2序列的另一个字段

在第一次检查数据时(大约有70个col很难确定过滤的内容是什么),它看起来像是在删除具有较旧日期1的记录,但我不相信是这样吗


谢谢

group by
将折叠按字段分组的所有行。
选择distinct
选择distinctrow
相同,并将“distinct”应用于整行。例如

field1  field2  field3
1       1       1        <--- row 1
1       1       2        <--- row 2
1       2       3        <--- row 3
1       1       1        <--- row 4, identical to row 1
返回一行,因为所有行都具有相同的field1值

SELECT * FROM x GROUP BY field1, field2
返回2行,因为field2有两个不同的值

SELECT DISTINCT * FROM X

返回3行,因为第1行和第4行是相同的,您将得到第1行、第2行、第3行。
group by
将折叠任何按字段分组的行。
选择distinct
选择distinctrow
相同,并将“distinct”应用于整行。例如

field1  field2  field3
1       1       1        <--- row 1
1       1       2        <--- row 2
1       2       3        <--- row 3
1       1       1        <--- row 4, identical to row 1
返回一行,因为所有行都具有相同的field1值

SELECT * FROM x GROUP BY field1, field2
返回2行,因为field2有两个不同的值

SELECT DISTINCT * FROM X

返回3行,因为第1行和第4行是相同的,所以您将得到第1行、第2行、第3行

您在第二个示例中是指按字段1分组还是按字段2分组?此外:如果您使用GROUP BY,您甚至可以在select语句/where子句等中添加一些聚合函数。而使用distinct不允许您这样做。谢谢,distinct或GROUP BY ARBIRI请不要在查询中使用其他字段来消除重复项或选择最顶层的行,或以任何方式考虑ORDER BY?您在第二个示例中是指GROUP BY field1、field2吗?此外:如果使用GROUP BY,您甚至可以在select语句/where子句等中添加一些聚合函数,而使用distinct则不允许您这样做谢谢,DISTINCT或GROUP BY会任意使用查询中的其他字段来消除重复项或选择最上面的行,还是以任何方式考虑ORDER BY?