按照salary的累计和running_total,
按照salary的累计和running_total,其中running_total为前N个当前( to_date = ‘9999-01-01’)员工的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
));
select emp_no,salary,sum(salary) over(order by emp_no) running_total
from salaries
where to_date='9999-01-01';
对于employees表中,输出first_name排名)为奇数的first_name
对于employees表中,输出first_name排名(按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
));
如,输入为:
INSERT INTO employees VALUES(10001,‘1953-09-02’,‘Georgi’,‘Facello’,‘M’,‘1986-06-26’);
INSERT INTO employees VALUES(10002,‘1964-06-02’,‘Bezalel’,‘Simmel’,‘F’,‘1985-11-21’);
INSERT INTO employees VALUES(10005,‘1955-01-21’,‘Kyoichi’,‘Maliniak’,‘M’,‘1989-09-12’);
INSERT INTO employees VALUES(10006,‘1953-04-20’,‘Anneke’,‘Preusig’,‘F’,‘1989-06-02’);
select a.first_name
from (select emp_no,first_name,row_number() over(order by first_name) row_num
from employees) a
where row_num%2=1
order by emp_no;
出现三次以及三次以上的积分
id为用户主键id,number代表积分情况,让你写一个sql查询,积分表里面出现三次以及三次以上的积分,查询结果如下:
select number
from grade
group by number
having count(*)>=3;
刷题通过的题目排名
在牛客刷题有一个通过题目个数的(passing_number)表,id是主键,简化如下:
第1行表示id为1的用户通过了4个题目;
…
第6行表示id为6的用户通过了4个题目;
请你根据上表,输出通过的题目的排名,通过题目个数相同的,排名相同,此时按照id升序排列,数据如下:
id为5的用户通过了5个排名第1,
id为1和id为6的都通过了2个,并列第2
select a.id,a.number,count(distinct b.number) t_rank
from passing_number a,passing_number b
where a.number<=b.number
group by a.id,a.number
order by t_rank asc;
找到每个人的任务
有一个person表,主键是id,如下:
有一个任务(task)表如下,主键也是id,如下:
请你找到每个人的任务情况,并且输出出来,没有任务的也要输出,而且输出结果按照person的id升序排序,输出情况如下:
select p.id,p.name,t.content
from person p
left join task t
on p.id=t.person_id
order by p.id;