【发布时间】:2014-01-18 15:14:54
【问题描述】:
我需要更新按价格排序的表格并重新分配订购的价格。 价格和价值按 idcategory 分组。这是一个例子:
|身份证 | id类别 |价格 |价值 | | 1 | 1 | 10 | 3 | | 2 | 1 | 12 | 30 | | 3 | 1 | 43 | 9 | | 4 | 1 | 32 | 23 | | 5 | 2 | 38 | 13 | | 6 | 2 | 8 | 26 | | 7 | 2 | 3 | 34 | | 8 | 2 | 10 | 12 | . .. .. .. .. .. .. .. .. .. .. .. ..我需要通过 idcategory 将排序值重新分配给排序价格来重新排序表分组,如下所示:
|身份证 | id类别 |价格 |价值 | | 1 | 1 | 10 | 3 | | 2 | 1 | 12 | 9 | | 3 | 1 | 32 | 23 | | 4 | 1 | 43 | 30 | | 5 | 2 | 3 | 12 | | 6 | 2 | 8 | 13 | | 7 | 2 | 10 | 26 | | 8 | 2 | 38 | 34 | .. .. .. .. .. .. .. .. .. .. ... ... ..数据库是 postgres 9.2。
任何想法都会受到赞赏。
谢谢你,新年快乐!!!
这是基于 GarethD 建议的更新工作解决方案:
WITH OrderedValues 作为 (选择值, 价钱, id类别, ROW_NUMBER() OVER(PARTITION BY idcategory ORDER BY Value) AS ValueNum, ROW_NUMBER() OVER(PARTITION BY idcategory ORDER BY Price) AS PriceNum 从T ), OrderedIDs AS (选择 ID, id类别, ROW_NUMBER() OVER(PARTITION BY idcategory ORDER BY ID) AS RowNum 从T ), 新值作为 (选择 i.ID, v.价值, p.价格 FROM OrderedIDs 我 内连接 OrderedValues v ON i.RowNum = v.ValueNum AND i.idcategory = v.idcategory INNER JOIN OrderedValues p ON i.RowNum = p.PriceNum AND i.idcategory = p.idcategory ) 更新 T SET 价格 = v.Price, 价值 = v.价值 来自 NewValues v 哪里 v.ID = T.ID; 选择 * 从T;【问题讨论】:
-
你是如何确定这些数据的顺序的?
-
ASC 的价格和价值
标签: sql postgresql postgresql-9.2