sql - sql根据两列中的某个值添加具有唯一ID的列
问题描述
我在为我的数据库表创建“id”列时遇到问题。id 列将唯一的 id 添加到 value1 和 value2 中具有相同值的行,包括反向。
我想实现以下目标:
value1, value2, id
1 2 1
1 2 1
2 1 1
3 4 2
4 3 2
5 6 3
6 7 4
我尝试在我的 select 语句中通过以下查询创建 id 列:(它只组合具有相等 value1 和 value2 的行):
SUM(CASE
WHEN value1= value1 and value2= value1 THEN 1
ELSE NULL END) OVER (PARTITION BY value1,value2) AS id
解决方案
您可以使用;
select t.*,
dense_rank() over (order by (case when value1 < value2 then value1 else value2 end),
(case when value1 < value2 then value2 else value1 end)
) as group_id
from t;
我应该注意到大多数数据库都支持greatest()
and least()
,所以这可以更简单地写成:
select t.*,
dense_rank() over (order by least(value1, value2), greatest(value1, value2)
) as group_id
from t;
推荐阅读
- objective-c - 如何在obj c中的浮点值小数后获得个位数?
- python - 基于旧的 groupby 创建新的 DataFrame
- basic - DDE 错误 285(应用程序拒绝执行 DDE)
- java - 在 gem5(或任何非 C 语言)中运行 Java 程序
- html - 反转html中列出的项目的顺序
- c# - 在 C# 中将文件附件发送到 Facebook Messenger API
- ruby - 网格战舰板 - 如何在某些点插入换行符?
- javascript - onfocus="blur()" 仅在移动设备上
- javascript - 仅在加载目标页面的 DOM 时,如何使用 jquery .load 获取数据?
- node.js - 你如何代表明天早上?