Select查询如何使用Distinct子句

时间:2016-05-23 07:53:07

标签: sql select

任何人都可以详细解释为什么以下查询不起作用吗?

select dept_id, distinct job_id from employees

另外请建议一些有助于理解SQL查询内部工作的资源吗?

2 个答案:

答案 0 :(得分:2)

SELECT 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

请注意,现在排" 24 117"由于两名员工在一个部门工作相同,因此增加了一倍。因此,DISTINCT将删除结果中的重复行:

SELECT DISTINCT Dept_id, Job_id
  FROM Employees

给出:

24 117
24 118
25 117

但是如果你想让DB给你

的结果
SELECT Dept_id, DISTINCT Job_id

您的数据库无法猜测您想要与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查询中,您应该始终指定您想要的内容。

答案 1 :(得分:0)

据我了解,我认为您希望为所有部门获得独特的工作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