我有这样的表:
col1 | col2
__________________
15077244 | 544648
15077320 | 544648
15080285 | 544632
15382858 | 544648
15584221 | 544648
15584222 | 544648
15584223 | 544628
15584224 | 544628
15584225 | 544628
15584226 | 544628
15584227 | 544632
15584228 | 544632
我希望将其排名为col2值,如下例所示(这是我希望实现的):
col1 | col2 | rank
________________________
15077244 | 544648 | 1
15077320 | 544648 | 1
15080285 | 544632 | 2
15382858 | 544648 | 1
15584221 | 544648 | 1
15584222 | 544648 | 1
15584223 | 544628 | 3
15584224 | 544628 | 3
15584225 | 544628 | 3
15584226 | 544628 | 3
15584227 | 544632 | 2
15584228 | 544632 | 2
我找到了一个答案,建议我使用DENSE_RANK()函数。所以我用它:
SELECT col1, col2, DENSE_RANK() OVER(ORDER BY col2) as rank
FROM myTable
但是当我使用它时它会改变col1的顺序,如下所示:
col1 | col2 | rank
____________________________
15584223 | 544628 | 1
15584224 | 544628 | 1
15584225 | 544628 | 1
15584226 | 544628 | 1
15080285 | 544632 | 2
15584227 | 544632 | 2
15584228 | 544632 | 2
15077244 | 544648 | 3
15077320 | 544648 | 3
15382858 | 544648 | 3
15584221 | 544648 | 3
15584222 | 544648 | 3
现在当我在SELECT查询结束时使用ORDER BY(如ORDER BY col1)时,我的数据顺序正确但RANKS错误,因为例如col2值544648有RANK 3但它应该有RANK 1。
如何使用DENSE_RANK函数或其他不同的函数来帮助我在不更改数据顺序的情况下获取col2值?
答案 0 :(得分:1)
您需要将dense_rank
的订单更改为desc
。并按col1
asc
订购结果。
<强> Fiddle Demo 强>
SELECT
col1
, col2
, DENSE_RANK() OVER(ORDER BY col2 DESC) as rank
FROM myTable
ORDER BY col1 ASC
答案 1 :(得分:0)
虽然可能有一个更简单的解决方案,但这里有一种方法,使用带有email <- html_text(html_nodes(doc, xpath = "//a[@class = 'email']"))
的子查询来建立结果分组,按row_number
排序:
min(col1)
答案 2 :(得分:0)
您可以使用具有窗口最小值的相关子查询。
;WITH CorrelatedDistinctCount AS
(
SELECT
D.col1,
D.col2,
(
SELECT
COUNT(DISTINCT(X.col2))
FROM
Data X
WHERE
X.col1 <= D.col1) AS DistinctCol2Count
FROM
Data D
)
SELECT
C.col1,
C.col2,
MIN(C.DistinctCol2Count) OVER (PARTITION BY C.col2) AS rank
FROM
CorrelatedDistinctCount C
ORDER BY
C.col1 ASC