SQL_Task

创建表1

CREATE TABLE Employee (
  Id INT PRIMARY KEY,
  Name VARCHAR(255), 
  Salary INT,
  DepartmentId INT
);

INSERT INTO Employee VALUES
  (1, 'Joe', 70000, 1),
  (2, 'Henry', 80000, 2),
  (3, 'Sam', 60000, 2),
  (4, 'Max', 90000, 1);

创建表2

CREATE TABLE Department (
  Id INT PRIMARY KEY,
  Name VARCHAR(255)
);

INSERT INTO Department VALUES
  (1, 'IT'),
  (2, 'Sales');

 查询

SELECT
    d. NAME AS Department,
    e. NAME AS Employee,
    e.Salary as Salary
FROM
    employee as e
LEFT JOIN     department as d
on d.Id = e.DepartmentId 
WHERE (e.DepartmentId, e.Salary) IN
  (SELECT DepartmentId, MAX(Salary)
   FROM Employee
   GROUP BY DepartmentId);

Task3

 结果

排序1(rank1):

SELECT class, score_avg, RANK() OVER (ORDER BY score_avg DESC) AS rank1 FROM scores;

使用 RANK() 排序,分数相同并列第一。

排序2(rank2):

SELECT class, score_avg, DENSE_RANK() OVER (ORDER BY score_avg DESC) AS rank2 FROM scores;

使用 DENSE_RANK() 排序,分数相同并列第一。

排序3(rank3):

SELECT class, score_avg, ROW_NUMBER() OVER (ORDER BY score_avg DESC) AS rank3 FROM scores;

使用 ROW_NUMBER() 排序,按顺序排名。

以上使用 SQL 窗口函数可以实现给定的 3 种排名规则。

注意不同数据库对窗口函数的支持情况,这里使用的是通用的窗口函数语法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值