如何解决我们需要提供排名逻辑是只要我们有一个值“产品”,那么我们必须开始新的数字,并且下面的所有其他数字都应该遵循相同的等级
样本输入:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。