我有一张这样的表
+------+------+------+------+
| col1 | col2 | col3 | rank |
+------+------+------+------+
| 1 | A | X | 4 |
| 2 | C | Y | 3 |
| 2 | C | Y | 3 |
| | A | X | 3 |
| 1 | B | Z | 2 |
+------+------+------+------+
(5行)
我需要这样的o / p
+------+------+------+------+
| col1 | col2 | col3 | rank |
+------+------+------+------+
| 1 | A | X | 4 |
| 2 | C | Y | 3 |
| 1 | B | Z | 2 |
+------+------+------+------+
所以我写下面的查询
select col1,col2,col3,rank,dense_rank() over(order by rank desc) from table1;
但它没有给出正确的o / p
答案 0 :(得分:1)
试试这个!!
select a.col1,a.col2,a.col3,max(a.rank) as rank
from [dbo].[5] a join [dbo].[5] b
on a.col1=b.col1 group by a.col1,a.col2,a.col3
答案 1 :(得分:0)
看起来你需要使用max()进行聚合:
select
col1,col2,col3,
max(rnk)
from table1
group by col1,col2,col3
如果col1
的一个组合可以有col2, col3
的不同值,则distinct on
就是您所需要的:
select distinct on (col2, col3)
col1,col2,col3,
rnk
from table1
order by col2, col3, rnk desc
<强> sql fiddle demo 强>
答案 2 :(得分:0)
以下内容应符合您的要求:
select col1,col2,col3,rank,dense_rank() over(order by rank desc) from table1
WHERE col1 IS NOT NULL
GROUP BY 1, 2, 3, 4;
如果需要,您还可以在order by子句中使用数字别名。