问题描述
样本输入:
ID | Vals |
---|---|
1 | 产品 |
2 | 牛奶 |
3 | 黄油 |
4 | 奶酪 |
5 | 酸奶 |
6 | 产品 |
7 | 麦片 |
8 | 粥 |
9 | 产品 |
10 | 香蕉 |
样本输出:
ID | Vals | RANK |
---|---|---|
1 | 产品 | 1 |
2 | 牛奶 | 1 |
3 | 黄油 | 1 |
4 | 奶酪 | 1 |
5 | 酸奶 | 1 |
6 | 产品 | 2 |
7 | 麦片 | 2 |
8 | 粥 | 2 |
9 | 产品 | 3 |
10 | 香蕉 | 3 |
解决方法
这看起来像一个条件累积和:
select t.*,sum(case when vals = 'Product' then 1 else 0
end) over (order by id) as ranking
from t
order by id;
,
你也可以使用窗口函数:
SELECT *,SUM(CASE WHEN Vals ='Product' THEN 1 END) OVER (ORDER BY id) ranking
FROM tableName
,
假设您的表格按 ID 排序:
SELECT T.ID,T.Vals,(SELECT COUNT(DISTINCT ID) FROM table WHERE Vals = 'Product' AND ID <= T.ID) as Rank
FROM table T