SQL(1/12)
技術標籤:SQL
按照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
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’);
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;