我有一张表格,其中有多列,但是我只需要其中的两列。
select id, department from tbl
如果我想使用
distinct
,该怎么做呢?以下方法不起作用:select id, distinct department from tbl
select distinct id, department
from tbl
然而,如果某些部门有多个ID,你不能简单地获得不同的部门 - 你需要弄清楚你想要哪个多个ID中的哪一个(最大值?最小值?其他什么?)。
SELECT * FROM Table c1
WHERE ID = (SELECT MIN(ID) FROM Table c2
WHERE c1.department = c2.department)
这个问题的确切含义不清楚,但是一个场景可能是您想获取所有行,除了一个特定列只包含唯一值,而且您不介意为了实现这一点而舍弃哪些行。
在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
)
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?
以下陈述假设选择第一个与唯一值匹配的 id
select distinct (select top 1 id from tbl t2 where t1.department= t2.department) as id, department from tbl t1
分组统计能解决你的问题吗?
select id, department from tbl group by id