我有一个包含列
id, cl_id, ratio, diff
的表格,我想选择具有最大 ratio
的观测值,按 cl_id
分组,但如果存在相等的值,则应从相等值中选择最大 diff
。
下面是
Have
和 Want
表:
CREATE TABLE Have(
id INT PRIMARY KEY,
cl_id CHAR(1),
ratio DECIMAL(5,4),
diff INT
);
INSERT INTO Have(id, cl_id, ratio, diff) VALUES
(122222, 'a', 1.3333, 2),
(123333, 'a', 1.3333, 5),
(124444, 'b', 1.25, 2),
(125555, 'b', 1.6667, 1);
CREATE TABLE Want(
id INT PRIMARY KEY,
cl_id CHAR(1),
ratio DECIMAL(5,4),
diff INT
);
INSERT INTO Want(id, cl_id, ratio, diff) VALUES
(123333, 'a', 1.3333, 5),
(125555, 'b', 1.6667, 1);
我们可以在这里使用
ROW_NUMBER()
进行两级排序:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY cl_id ORDER BY ratio DESC, diff DESC) rn
FROM Have
)
SELECT id, cl_id, ratio, diff
FROM cte
WHERE rn = 1;