不知道如何做到这一点,也不知道如何用措辞来找到答案。
假设我有SELECT id, name, title, stuff FROM table
ID、姓名和头衔可以是任何内容,没关系。但我只想选择其中内容不同的 1 列。所以..
1, Bob, Builder, Hammer
2, Tom, Train, Track
3, Charlotte, Spider, Web
1, Bob, Builder, Children
2, Tom, Train, Children
3, Charlotte, Spider, Children
所以我想选择前三个,并且只选择后三个中的一个。
最佳答案
你可以试试这个:
select
max(id) as id,
max(name) as name,
max(title) as title,
stuff
from
table
group by
stuff;
我们这里有聚合(group by),所有未在 GROUP BY 子句中枚举的字段都应该由某个聚合函数处理。 MAX 就是这些函数之一。这意味着以下内容。当 sql 引擎发现多行具有相同的 stuff 字段值时,它应该将它们折叠为单行。但其他字段具有不同的值。例如,字段名称应该采用三个值中的哪一个?我们应该指出 sql 引擎在这种情况下该怎么做。例如,通过指定聚合函数 MAX,我们强制 sql 引擎选择三个值中的最大值。在我们的例子中,字段名称将返回“Tom”。我们可以使用其他一些聚合函数,例如最小值在这种情况下并不重要。
第 2 版(更安全):
select
t.id,
t.name,
t.title,
t.stuff
from
(select
max(id) as id,
stuff
from
table
group by
stuff
) as gt
join
table t on t.id = gt.id;
关于mysql - 选择不同的值,而其他值可以是任何值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9793830/