我在Oracle数据库中有以下架构和数据。
CREATE TABLE people (
person_id INTEGER NOT NULL PRIMARY KEY,
title VARCHAR2(20),
salary INT
);
INSERT INTO people (person_id, title, salary)
WITH names AS (
SELECT 4, 'Prof', 5 FROM dual UNION ALL
SELECT 5, 'Prof', 6 FROM dual UNION ALL
SELECT 6, 'Dr',7 FROM dual UNION ALL
SELECT 7, 'Dr',7 FROM dual
)
SELECT * FROM names;
select * from people;
我想通过标题和收入金额获得收入最少的人的身份。如果有两个收入最少的人,我只想要其中一个。以下是我想要的结果。
Id title Salary
4 Prof 5
6 Dr 7
第二行也可以是7 Dr 7
,因为两位博士的收入都相同。
我使用self joins检查了解决方案,但它不适合我的情况,可以有两个Drs获得相同的金额。
我正在使用oracle,并怀疑FIRST
函数可以帮助我吗?但我无法找到一个可以让我理解的地方。
提供可用数据here。
答案 0 :(得分:1)
WITH T AS
(SELECT person_id,
title,
salary,
ROW_NUMBER() OVER (PARTITION BY title
ORDER BY salary,
person_id) minsalary
FROM people)
SELECT person_id,
title,
salary
FROM T
WHERE minsalary = 1
ORDER BY 1
答案 1 :(得分:1)