Group By如何与Duplicates一起使用

时间:2015-07-10 19:47:44

标签: mysql sql

我试图了解一些SQL语句的工作原理。正确知道我正在调查GROUP BY并想知道,它如何选择显示/返回重复数据的内容。

考虑以下示例:

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  

所以,我的问题是:它有什么理由返回这些特定记录吗?它如何确定要获得什么?我正在使用MySQL。

1 个答案:

答案 0 :(得分:4)

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

注意MySQL文档对于这种情况的说法:

MySQL Handling of GROUP BY

  

服务器可以自由选择每个组中的任何值,因此除非它们相同,否则所选的值为 indeterminate

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

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