ID FirstName LastName
1 John Doe
2 Bugs Bunny
3 John Johnson
我想从FirstName列中选择DISTINCT结果,但我需要相应的ID和LastName。
结果集只需要显示一个John,但是ID为1,LastName为Doe。
ID FirstName LastName
1 John Doe
2 Bugs Bunny
3 John Johnson
我想从FirstName列中选择DISTINCT结果,但我需要相应的ID和LastName。
结果集只需要显示一个John,但是ID为1,LastName为Doe。
当前回答
SELECT firstName, ID, LastName from tableName GROUP BY firstName
其他回答
正如fyrye所指出的,被接受的答案与MySQL的旧版本有关,其中只有_full_group_by还没有被引入。使用MySQL 8.0.17(在本例中使用),除非禁用ONLY_FULL_GROUP_BY,否则将得到以下错误消息:
mysql> SELECT id, firstName, lastName FROM table_name GROUP BY firstName;
错误1055 (42000):SELECT列表中的表达式#1不在GROUP BY子句中,并且包含未聚合的列mydatabase.table_name。id',它不依赖于GROUP BY子句中的列;这与sql_mode=only_full_group_by不兼容
fyrye没有提到,但在https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html中描述的一种方法是将ANY_VALUE()函数应用到不在GROUP by子句中的列(本例中的id和lastName):
mysql> SELECT ANY_VALUE(id) as id, firstName, ANY_VALUE(lastName) as lastName FROM table_name GROUP BY firstName;
+----+-----------+----------+
| id | firstName | lastName |
+----+-----------+----------+
| 1 | John | Doe |
| 2 | Bugs | Bunny |
+----+-----------+----------+
2 rows in set (0.01 sec)
如上所述,
在这种情况下,MySQL忽略每个名称组中地址值的不确定性并接受查询。如果您不关心为每个组选择非聚合列的哪个值,那么这可能很有用。与SUM()或COUNT()等函数不同,ANY_VALUE()不是一个聚合函数。它只是抑制了不确定性的测试。
请记住,在使用by和order by组时,MySQL是唯一允许在组中按和/或按块排序的数据库,这些列不是select语句的一部分。
例如: 选择column1 从表 按列2分组 按列3排序
这将不会飞在其他数据库,如Postgres, Oracle, MSSQL等。您必须在这些数据库中执行以下操作
选择columnn1、column2、column3 从表 按列2分组 按列3排序
只是一些信息,以防您曾经将当前的代码迁移到另一个数据库或开始在另一个数据库中工作,并尝试重用代码。
SELECT ID,LastName
From TABLE_NAME
GROUP BY FirstName
HAVING COUNT(*) >=1
如何
`SELECT
my_distinct_column,
max(col1),
max(col2),
max(col3)
...
FROM
my_table
GROUP BY
my_distinct_column`
您可以使用组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