MySQL:选择 DISTINCT / UNIQUE,但返回所有列?

新手上路,请多包涵
SELECT DISTINCT field1, field2, field3, ......
FROM table;

我正在尝试完成以下 SQL 语句,但我希望它返回 所有列

这可能吗?

像这样的东西:

 SELECT DISTINCT field1, *
FROM table;

原文由 aryaxt 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 478
2 个回答

您正在寻找一个组:

 select *
from table
group by field1

有时可以用不同的 on 语句编写:

 select distinct on field1 *
from table

然而,在大多数平台上,上述两种方法都不起作用,因为其他列上的行为是未指定的。 (第一个在 MySQL 中有效,如果你正在使用的话。)

您可以获取不同的字段并坚持每次都选择一个任意行。

在某些平台(例如 PostgreSQL、Oracle、T-SQL)上,这可以直接使用窗口函数来完成:

 select *
from (
   select *,
          row_number() over (partition by field1 order by field2) as row_number
   from table
   ) as rows
where row_number = 1

在其他(MySQL、SQLite)上,您需要编写子查询,让您将整个表与自身连接起来( 示例),因此不推荐。

原文由 Denis de Bernardy 发布,翻译遵循 CC BY-SA 3.0 许可协议

在这里其他地方找到了这个,但这是一个有效的简单解决方案:

  WITH cte AS /* Declaring a new table named 'cte' to be a clone of your table */
 (SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY val1 DESC) AS rn
 FROM MyTable /* Selecting only unique values based on the "id" field */
 )
 SELECT * /* Here you can specify several columns to retrieve */
 FROM cte
 WHERE rn = 1

原文由 Michael Fever 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进