Oracle 对特定列使用DISTINCT
当我使用上面的查询时,它会导致上述所有属性的不同组合。由于employee_id(作为employees的主键)是唯一的,因此查询将生成表中的所有行 我希望有一个结果集,它具有佣金pct和部门id的不同组合。因此,应该如何形成查询。当我试图把<代码>区别中间作为Oracle 对特定列使用DISTINCT,oracle,distinct,Oracle,Distinct,当我使用上面的查询时,它会导致上述所有属性的不同组合。由于employee_id(作为employees的主键)是唯一的,因此查询将生成表中的所有行 我希望有一个结果集,它具有佣金pct和部门id的不同组合。因此,应该如何形成查询。当我试图把区别中间作为 select distinct employee_id, first_name, commission_pct, department_id from employees; 这导致了一个错误 select employee_id, f
select distinct employee_id, first_name, commission_pct, department_id from
employees;
这导致了一个错误
select employee_id, first_name, distinct commission_pct, department_id from
employees;
如何形成一个结果只有佣金和部门id的不同组合的查询。该表来自oracle的
HR
schema。您必须删除两列才能进行不同的查询
ORA-00936-missing expression
事实上,如果您的第二个查询可以工作,您希望在前两列中看到什么?考虑实例数据
select distinct commission_pct, department_id from
employees;
您只希望得到这样的两行结果
| employee_id | first_name | commission_pct | department_id |
| 1 | "x" | "b" | 3 |
| 2 | "y" | "b" | 3 |
| 1 | "x" | "c" | 4 |
| 2 | "y" | "c" | 4 |
但是你对前两栏有什么期待呢?你能试试这个吗
| employee_id | first_name | commission_pct | department_id |
| ? | ? | "b" | 3 |
| ? | ? | "c" | 4 |
如果您不关心特定行,则使用聚合函数
SELECT
NAME1,
PH
FROM
(WITH T
AS (SELECT
'mark' NAME1,
'1234567' PH
FROM
DUAL
UNION ALL
SELECT
'bailey',
'456789'
FROM
DUAL
UNION ALL
SELECT
'mark',
'987654'
FROM
DUAL)
SELECT
NAME1,
PH,
ROW_NUMBER ( ) OVER (PARTITION BY NAME1 ORDER BY NAME1) SEQ
FROM
T)
WHERE
SEQ = 1;
你的要求是不可能的。您不能选择所有员工id,但只有不同的佣金pct和部门id 所以仔细想想,你想展示什么:
- 所有不同的佣金,仅限部门id
- 所有不同的佣金、部门id和相关员工人数
- 所有不同的佣金、部门id和相关员工是否分开
- 所有员工,但如果佣金pct和部门id与前一行相同,则为空
第一个问题可以用不同的方法解决。第二个和第三个带有GROUP BY(加上count或listagg)。最后一个问题将通过分析函数LAG解决。您能否举例说明,根据您的要求,第一次查询返回的哪些行不应出现。您可以在
佣金和部门id
上使用group by。如果你不知道怎么做,请回复。
SELECT
NAME1,
MAX ( PH ) PH
FROM
T
GROUP BY
NAME1;