选择不同的ID以及另一列数据

6

我有一张表格,其中有多列,但是我只需要其中的两列。

select id, department from tbl

如果我想使用distinct,该怎么做呢?以下方法不起作用:
select id, distinct department from tbl

1
您没有提供足够的信息以便回答。您应该发布一些示例数据。 - Fionnuala
6个回答

5
使用以下代码获取唯一的行:
select distinct id, department 
from tbl

然而,如果某些部门有多个ID,你不能简单地获得不同的部门 - 你需要弄清楚你想要哪个多个ID中的哪一个(最大值?最小值?其他什么?)。


我希望“distinct”仅针对部门,而其余的列将可供以后使用,因此我需要获取“id”列。 - Y.G.J
@Y.G.J - 每个部门是否只有一个关联的ID,还是有多个? - Oded
我看不出这个答案有什么问题,在缺乏原帖信息的情况下,这是最好的答案。 - Fionnuala

3
SELECT  * FROM Table c1
 WHERE ID = (SELECT MIN(ID) FROM Table c2
    WHERE c1.department = c2.department)

3

这个问题的确切含义不清楚,但是一个场景可能是您想获取所有行,除了一个特定列只包含唯一值,而且您不介意为了实现这一点而舍弃哪些行。

在SQL Server中,可以使用以下操作来实现:

SELECT id, department FROM tbl WHERE id IN (
    SELECT MIN(id)
    FROM tbl
    GROUP BY department
)

id是每行唯一的标识符,department是应该不同的列,而tbl则是表名。

如果你只想对非NULL值执行此检查(因此仍然返回所有department的NULL值),可以进行以下调整:

SELECT id, department FROM tbl WHERE department IS NULL OR id IN (
    SELECT MIN(id)
    FROM tbl
    GROUP BY department
)

请注意,这会运行非常缓慢,因此只适用于行数较少的表格。

2

DISTINCT需要对所有列进行操作,原因与GROUP BY需要包括所有列(没有聚合函数操作的列)相同。这是因为如果您想将DISTINCT应用于以下结果集。

id    department
----------------
1     one
2     one
3     one
4     two

即使在某些数据库中(例如mysql可以在department上进行group by而不需要在GROUP BY中包含id),允许SELECT id, DISTINCT department FROM table_name,你最终会得到未定义的情况:

id    department
----------------
?     one
4     two

? 的位置应该填入1、2或3?


0

以下陈述假设选择第一个与唯一值匹配的 id

select distinct (select top 1 id from tbl t2 where t1.department= t2.department) as id, department from tbl t1 

-1

分组统计能解决你的问题吗?

select id, department from tbl group by id

不,不是在MS Access中(或其他数据库而非MySQL)发生的。建议使用的SQL在遵循GROUP BY方面遵循SQL标准的数据库中会引发错误。 - Unreason
抱歉,我想写的是:选择 id、department 从 tbl 分组按 id、department。 - Karl Gohery

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接