MySQL:选择DISTINCT / UNIQUE,但返回所有列?
MySQL:选择DISTINCT / UNIQUE,但返回所有列?
SELECT DISTINCT field1, field2, field3, ...... FROM table;
我正在尝试实现以下SQL语句,但我希望它返回所有列。
这是可能的吗?
类似这样:
SELECT DISTINCT field1, * FROM table;
admin 更改状态以发布 2023年5月20日
从您的问题表述中,我理解您想要选择给定字段的不同值,并且对于每个这样的值,列出同一行中的所有其他列值。大多数DBMS不允许使用DISTINCT
或GROUP BY
来实现此目的,因为结果不确定。
可以这样想:如果您的field1
出现多次,那么将列出哪个field2
的值(假设在两行中您有相同的field1
,但是这两行中有两个不同的field2
值)。
但是,您可以使用聚合函数(为要显示的每个字段显式指定)并使用GROUP BY
而不是DISTINCT
:
SELECT field1, MAX(field2), COUNT(field3), SUM(field4), .... FROM table GROUP BY field1
您正在寻找按照某个字段分组的方式:
select * from table group by field1
有时可以使用distinct 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),需要编写子查询,使其与整个表自身连接(例如示例),因此不推荐。