首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PostgreSQL中按特定值对id重复的行进行排序?

如何在PostgreSQL中按特定值对id重复的行进行排序?
EN

Stack Overflow用户
提问于 2019-02-19 20:06:12
回答 1查看 45关注 0票数 0

我对DB表中的joins进行了select操作,结果我得到了ID重复的记录。为了对记录进行排序(分页目的),我在PostgreSQL中使用dense_rank()而不是()。问题是:如何根据特定列值及其来自另一列的相应值对结果进行排序?

代码语言:javascript
复制
SELECT *
FROM
   (SELECT crm_leads.id,
          f.name,
          fv.value,
          dense_rank() OVER (ORDER BY crm_leads.id) AS offset_
   FROM crm_leads
   INNER JOIN crm_modules AS m ON crm_leads.module_id = m.id
   INNER JOIN crm_fields AS f ON f.module_id = m.id
   LEFT JOIN crm_field_values AS fv ON fv.lead_id = crm_leads.id
   AND fv.field_id = f.id
   LEFT JOIN crm_field_type_values AS ftv ON ftv.field_id = f.id
   WHERE crm_leads.domain_uuid = '6191af69-9cb5-44f7-b455-3eae6f81d01d'
   AND m.id = 41 ) 
   AS result_offset

选择后我拥有的内容:

代码语言:javascript
复制
| ID | NAME  | VALUE |
| 3  | name1 | 13    |
| 3  | name2 | 23    |
| 3  | name3 | 44    |
| 4  | name2 | 55    |
| 4  | name1 | 12    |
| 5  | name2 | 89    |
| 5  | name1 | 14    |

例如,我希望按NAME: name1值及其相应值进行排序。排序后的期望(值: 12,13,14):

代码语言:javascript
复制
| ID | NAME  | VALUE |
| 4  | name2 | 55    |
| 4  | name1 | 12    |
| 3  | name1 | 13    |
| 3  | name2 | 23    |
| 3  | name3 | 44    |
| 5  | name2 | 89    |
| 5  | name1 | 14    |
EN

回答 1

Stack Overflow用户

发布于 2019-02-19 20:07:37

可以在order by中使用窗口函数。因此,我认为您需要在外部查询上使用order by

代码语言:javascript
复制
order by min(value) over (partition by id), id

请注意,在最外层的查询中没有order by。因此,您不能保证结果将以任何特定的顺序出现。子查询中的order by不保证外部查询中的排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54765965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档