【发布时间】:2014-09-22 12:36:51
【问题描述】:
您好,我为 Derby 数据库编写了一个 SQL 查询,该查询从每个具有最高薪水的公司中获取一名员工
这些是表结构
create table Company_Tbl_One(
company_Id int primary key,
company_name varchar(100)
)
create table Employee_Tbl_One(
employee_Id int primary key,
employee_name varchar(100),
company int references Company_Tbl_One
)
alter table Employee_Tbl_One add salary int
insert into Company_Tbl_One values(12,'Facebook Inc');
insert into Company_Tbl_One values(11,'Google Inc');
insert into Company_Tbl_One values(10,'Yahoo Inc');
insert into Company_Tbl_One values(14,'AOL Inc');
insert into EMPLOYEE_TBL_ONE(employee_Id,employee_name,company,salary) values(1, 'Tom Jackson',12,1000);
insert into EMPLOYEE_TBL_ONE(employee_Id,employee_name,company,salary) values(2, 'Jimmy John',12,200);
insert into EMPLOYEE_TBL_ONE(employee_Id,employee_name,company,salary) values(3, 'Samual Jackson',11,2000);
insert into EMPLOYEE_TBL_ONE(employee_Id,employee_name,company,salary) values(4, 'Sam Raime',10,3000);
insert into EMPLOYEE_TBL_ONE(employee_Id,employee_name,company,salary) values(5, 'Tidy Mann',14,5000);
insert into EMPLOYEE_TBL_ONE(employee_Id,employee_name,company,salary) values(6, 'Oliver Stone',14,5300);
insert into EMPLOYEE_TBL_ONE(employee_Id,employee_name,company,salary) values(7, 'Falcon Gonzalies',10,3300);
insert into EMPLOYEE_TBL_ONE(employee_Id,employee_name,company,salary) values(8, 'Ister Jack',11,2300);
sql查询如下
select e.employee_name, c.company_name
from EMPLOYEE_TBL_ONE e,
COMPANY_TBL_ONE c,
(select max(salary) as SALARY,
company as COMPANY_ID
from EMPLOYEE_TBL_ONE group by COMPANY) x
where c.company_Id = x.COMPANY_ID
and e.salary = x.SALARY
and e.company = c.company_Id
现在上面的 sql 查询可以正常工作并获取我的结果,
但是对于同一个问题语句,还有其他的写sql查询的方法吗?
【问题讨论】:
-
不相关但是:您应该开始在
FROM子句中使用显式JOINs 而不是在 where 子句中使用隐式连接。关于您的问题:由于 Derby 缺少窗口功能,我看不到另一种实现您想要的方法。 -
为什么需要多种方式来编写查询?由于某种原因,您确定的那个是不够的吗?
标签: sql derby greatest-n-per-group