1. 程式人生 > 其它 >SQL(1/12)

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

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;