mySQLselect一列DISTINCT,与相应的其他列

ID FirstName LastName 1 John Doe 2 Bugs Bunny 3 John Johnson 

我想从FirstName列中selectDISTINCT结果,但是我需要相应的IDLastName

结果集只需显示一个John ,但ID为1,Doe的LastName为。

试试这个查询

  SELECT ID, FirstName, LastName FROM table GROUP BY(FirstName) 

DISTINCT关键字不会像你期望的那样工作。 当你使用SELECT DISTINCT col1, col2, col3你实际上select了所有独特的{col1,col2,col3}元组。

编辑

原来的答案是在MySQL 5.7.5之前编写的,原来的答案不再适用。 需要注意的是,使用GROUP BY而不使用聚合函数会产生意想不到的结果,因为MySQL可以自由地select被分组的数据集中的ANY值。

假设名字和姓氏是唯一索引的, GROUP BY的替代方法是使用LEFT JOIN进行sorting来过滤结果集。 见示范

要按降序(ZA)检索按姓氏sorting的不同名字,

 SELECT t1.* FROM table_name AS t1 LEFT JOIN table_name AS t2 ON t1.firstname = t2.firstname AND t1.lastname < t2.lastname WHERE t2.id IS NULL; #Results | id | firstname | lastname | |----|-----------|----------| | 2 | Bugs | Bunny | | 3 | John | Johnson | 

按升序(AZ)检索按姓氏sorting的不同姓氏

 SELECT t1.* FROM table_name AS t1 LEFT JOIN table_name AS t2 ON t1.firstname = t2.firstname AND t1.lastname > t2.lastname WHERE t2.id IS NULL; #Results | id | firstname | lastname | |----|-----------|----------| | 2 | Bugs | Bunny | | 1 | John | Doe | 

您可以根据需要订购产生的数据。

警告

对于使用ORDER BY的情况,使用MySQL GROUP BY不会总是产生预期的结果确保预期结果的最佳实现方法是使用像这样的子查询来过滤结果集合作用域。

table_name数据

 ID FirstName LastName 1 John Doe 2 Bugs Bunny 3 John Johnson 

询问

 SELECT * FROM ( SELECT * FROM table_name ORDER BY ID DESC ) AS t1 GROUP BY FirstName #Results ID FirstName LastName 2 Bugs Bunny 3 John Johnson 

 SELECT * FROM table_name GROUP BY FirstName ORDER BY ID DESC #Results ID FirstName LastName 2 Bugs Bunny 1 John Doe 

示例testing用例: http : //sqlfiddle.com/#!2/36511d/3

 SELECT ID,LastName From TABLE_NAME GROUP BY FirstName HAVING COUNT(*) >=1 

不知道你是否可以用MySQL做到这一点,但是你可以在T-SQL中使用CTE

 ; WITH tmpPeople AS ( SELECT DISTINCT(FirstName), MIN(Id) FROM People ) SELECT tP.Id, tP.FirstName, P.LastName FROM tmpPeople tP JOIN People P ON tP.Id = P.Id 

否则,你可能不得不使用临时表。

 SELECT firstName, ID, LastName from tableName GROUP BY firstName 
 SELECT DISTINCT(firstName), ID, LastName from tableName GROUP BY firstName 

会是最好的select国际海事组织。

 select distinct (column1), column2 from table1 group by column1 

请记住,在使用组和按顺序时,MySQL是唯一的数据库,允许在组中使用列和/或按顺序使用不属于select语句的部分。

因此,例如:从列表中select列1,按列2select列3

这不会像Postgres,甲骨文,MSSQL等其他数据库中飞行。您将不得不在这些数据库中执行以下操作

从表组中select第1列,第2列,第3列,第2列按顺序select第3列

只是一些信息,如果您将当前的代码迁移到另一个数据库或开始在另一个数据库中工作,并尝试重用代码。

您可以使用group by来显示不同的值以及相应的字段。

 select * from tabel_name group by FirstName 

现在你得到这样的输出:

 ID FirstName LastName 2 Bugs Bunny 1 John Doe 

如果你想回答像

 ID FirstName LastName 1 John Doe 2 Bugs Bunny 

然后使用这个查询,

 select * from table_name group by FirstName order by ID