Select查询如何使用Distinct子句



有人能详细解释为什么下面的查询不起作用吗?

select dept_id, distinct job_id from employees

另外,请提供一些有助于理解SQL查询内部工作原理的资源?

SELECT DISTINCT用于获取一组唯一的行。换句话说,DISTINCT选项从结果中剪切可重复的行。大多数情况下(实际上大多数数据库),由于数据的不确定性,您不能在并非所有列上使用distinct,而只能在某些列上使用。

例如,如果您的员工表看起来像

Emp_id Dept_id Job_id
1      24      117
2      24      117
3      24      118
4      25      117

如果你想获得每个部门的独特工作列表,首先你应该尝试

SELECT Dept_id, Job_id
FROM Employees

所以结果会像:

24 117
24 117
24 118
25 117

请注意,由于两名员工在一个部门从事相同的工作,现在第"24117"行增加了一倍。因此,DISTINCT将在您的结果中剪切重复的行:

SELECT DISTINCT Dept_id, Job_id
FROM Employees

给出:

24 117
24 118
25 117

但如果你想让DB给你的结果

SELECT Dept_id, DISTINCT Job_id

你的DB将无法猜测你想在117 Job_id的组合中获得的Dept_id到底是什么(选择类似于"24、24或25?")。因此,如果你只想得到不同的job_id和一些dept_id,那么你应该指定你想在结果中看到的dept_id(如果有很多的话)。例如,您可能会得到一个最小dept_id或类似的东西:

SELECT MIN(Dept_id) AS Dept_id, Job_id
FROM Employees
GROUP BY Job_id

结果如下:

24 117
24 118

这一切都是关于确定性和不确定性的。在sql查询中,您应该始终指定您想要的内容。

据我所知,我认为您希望获得所有部门的唯一作业ID。

只需尝试此查询:

SELECT dept_id, job_id FROM employees Group By dept_id, job_id

Dept_id|Job_id

1      1
1      2
1      3
1      3
2      2
2      3  
2      4  
2      4  
3      1  
3      4  
4      1

运行查询,您将得到以下结果。

Dept_id|Job_id

1      1
1      2
1      3
2      2
2      3  
2      4  
3      1  
3      4  
4      1

最新更新