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

30 浏览
0 Comments

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

SELECT DISTINCT field1, field2, field3, ......
FROM table;

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

这是可能的吗?

类似这样:

SELECT DISTINCT field1, * 
FROM table;

admin 更改状态以发布 2023年5月20日
0
0 Comments

从您的问题表述中,我理解您想要选择给定字段的不同值,并且对于每个这样的值,列出同一行中的所有其他列值。大多数DBMS不允许使用DISTINCTGROUP BY来实现此目的,因为结果不确定。

可以这样想:如果您的field1出现多次,那么将列出哪个field2的值(假设在两行中您有相同的field1,但是这两行中有两个不同的field2值)。

但是,您可以使用聚合函数(为要显示的每个字段显式指定)并使用GROUP BY而不是DISTINCT

SELECT field1, MAX(field2), COUNT(field3), SUM(field4), ....
FROM table GROUP BY field1

0
0 Comments

您正在寻找按照某个字段分组的方式:

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),需要编写子查询,使其与整个表自身连接(例如示例),因此不推荐。

0