SQL语句总结(一)表自连接

1、对所有员工的当前(to_date='9999-01-01')薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列

CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

SQL语句总结(一)表自连接_第1张图片

select 
    e1.emp_no,
    e1.salary,
    count(distinct e2.salary) rank
from 
    employees e1,
    employees e2,
where
    e1.salary <= e2.salary
and e1.to_date = '9999-01-01'
and e2.to_date = '9999-01-01'
group by e1.emp_no
order by e1.salary desc,e1.emp_no

2、对于employees表中,按照first_name排序,给出奇数行的first_name
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
输出格式:

first_name
Georgi
Chirstian
Anneke
Tzvetan
Saniya

Mary

select e1.first_name
from employees e1
where (select count(*)
       from employees e2
       where e1.first_name <= e2.first_name
       )%2=1

3、按照salary的累计和running_total,其中running_total为前两个员工的salary累计和,其他以此类推。 具体结果如下Demo展示。。
CREATE TABLE `salaries` ( `emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));
输出格式:

emp_no salary running_total
10001 88958 88958
10002 72527 161485
10003 43311 204796
10004 74057 278853
10005 94692 373545
10006 43311 416856
10007 88070 504926
10009 95409 600335
select 
    s1.emp_no,s1.salary,sum(s2.salary) runing_total
from 
    salaries s1,salaries s2
where 
    s1.emp_no >= s2.emp_no
and s1.to_date = '9999-01-01'
and s2.to_date = '9999-01-01'
group by 
    s1.emp_no

 

你可能感兴趣的:(SQL语句总结(一)表自连接)