Group By 如何处理重复项

How Group By works with Duplicates

我想深入了解某些 SQL 语句的工作原理。正确知道我正在调查 GROUP BY 并想知道,它如何选择 show/return 重复数据的内容。

考虑以下示例:

CREATE TABLE customers 
( 
    FirstName  VARCHAR(50), 
    LastName   VARCHAR(50), 
    MobileNo   VARCHAR(15) 
); 

INSERT INTO customers VALUES ('Niraj','Yadav',989898); 
INSERT INTO customers VALUES ('Chetan','Gadodia',959595); 
INSERT INTO customers VALUES ('Chetan','Gadodia',959590); 
INSERT INTO customers VALUES ('Atul','Kokam',42424242); 
INSERT INTO customers VALUES ('Atul','Kokam',42424246); 
INSERT INTO customers VALUES ('Vishal','Parte',9394452); 
INSERT INTO customers VALUES ('Vishal','Parte',939445); 
INSERT INTO customers VALUES ('Vishal','Parte',9394451); 
INSERT INTO customers VALUES ('Jinendra','Jain',12121); 
INSERT INTO customers VALUES ('Jinendra','Jain',121212); 

如果我运行这个查询...

SELECT    *
FROM      customers
GROUP BY  FirstName;

我得到以下结果:

FirstName  LastName  MobileNo  
---------  --------  ----------
Atul       Kokam     42424242  
Chetan     Gadodia   959595    
Jinendra   Jain      12121     
Niraj      Yadav     989898    
Vishal     Parte     9394452  

所以,我的问题是:returns 这些特定记录有什么原因吗?它如何确定要得到什么?我正在使用 MySQL.

在其他数据库中,您的查询将不会被允许,因为在这种情况下结果是不可预测的。

请注意 MySQL 文档对这种情况的说明:

MySQL Handling of GROUP BY

The server is free to choose any value from each group, so unless they are the same, the values chosen are indeterminate.


我还应该提一下,Gordon Linoff 最近向我指出,从 MySQL 的 5.7 版开始,默认情况下将不再允许像您这样的可能会出现不可预知结果的查询。

相关信息:MySQL 5.7: only_full_group_by Improved, Recognizing Functional Dependencies, Enabled by Default!