我有两个表emp和薪金。
select * from emp;
id | name
-----+--------
111 | Ashika
222 | banu
333 | charu
444 | dhji
select * from salary;
id | sal_id | month | sal
-----+--------+-------+-------
111 | 1 | jan | 15000
111 | 2 | dec | 14000
111 | 3 | nov | 14000
222 | 13 | jan | 14000
222 | 12 | Dec | 14000
333 | 22 | Dec | 14000
333 | 23 | jan | 16000
444 | 33 | jan | 12000
我想获得在“ jan”月获得最高工资的员工的名字。
我已经厌倦了postgres中的以下查询:
select name,max(sal) as sal from Empp join Salary using(id)where month='jan' group by name;
name | sal
--------+-------
charu | 16000
Ashika | 15000
dhji | 12000
banu | 14000
select max(sal) from (select name,max(sal) as sal from Empp join Salary using(id)where month='jan'group by name) as foo;
max
-------
16000
(1 row)
我希望从表中检索姓名和工资。
Excepted output:
name | sal
-------+-------
charu | 16000
答案 0 :(得分:2)
我将在此处使用$this->db->getPDOConnection()->run(...etc);
ROW_NUMBER
答案 1 :(得分:1)
@ishika,我想您是在询问不使用“ With”键的查询。
这是更新的答案:- 1.使用CTE
WITH cte AS (
SELECT e.name, s.salary
FROM emp e
INNER JOIN salary s
ON e.id = s.emp_id
WHERE s.month = 'jan'
)
SELECT top 1 name, salary
FROM cte order by salary desc
2。不使用CTE
SELECT TOP 1 name, salary
FROM (SELECT e.name, s.salary
FROM emp e
INNER JOIN salary s
ON e.id = s.emp_id
WHERE s.month = 'jan') my_selected_data
ORDER BY salary DESC
答案 2 :(得分:0)
WITH result AS
(SELECT e.name, s.sal FROM empp e
INNER JOIN
salary s ON e.id = s.id WHERE s.month = 'jan')
SELECT name,sal FROM result
where sal = (select max(sal) from (select name,max(sal) as sal
from Empp join Salary using(id)where month='jan'
group by name) as foo);
答案 3 :(得分:0)
最简单的查询:
name | sal
-------+-------
charu | 16000
(1 row)
输出:
{{1}}