我正在尝试解决一个一开始看起来很简单但找不到任何(简单)解决方案的问题
我有一个包含多列的表,我想在由某些列定义的组上创建一个ID
更好地在示例中显示三列,我想在由col1和col2定义的组上具有ID,这看起来像是窗口函数的工作,但是我却以某种方式失败了
col1 col2 col3 ID
val1 valA x 1
val1 valA y 1
val1 valB y 2
val2 valC z 3
val3 valA v 4
val3 valA r 4
答案 0 :(得分:4)
实际上,使用Dense_Rank分析功能非常简单:
PostgreSQL 9.6模式设置:
CREATE TABLE Table1
("col1" varchar(4), "col2" varchar(4), "col3" varchar(1))
;
INSERT INTO Table1
("col1", "col2", "col3")
VALUES
('val1', 'valA', 'x'),
('val1', 'valA', 'y'),
('val1', 'valB', 'y'),
('val2', 'valC', 'z'),
('val3', 'valA', 'v'),
('val3', 'valA', 'r')
;
查询1 :
select col1, col2, col3
, dense_rank() over (order by col1, col2) id
from table1
Results :
| col1 | col2 | col3 | id |
|------|------|------|----|
| val1 | valA | x | 1 |
| val1 | valA | y | 1 |
| val1 | valB | y | 2 |
| val2 | valC | z | 3 |
| val3 | valA | v | 4 |
| val3 | valA | r | 4 |