【问题标题】:How to sort rows with duplicated id's by specific value in PostgreSQL?如何在 PostgreSQL 中按特定值对具有重复 ID 的行进行排序?
【发布时间】:2023-03-28 01:03:02
【问题描述】:

我使用数据库表中的连接进行了选择,结果我的记录具有重复的 ID。对于排名记录(分页目的),我在 PostgreSQL 中使用了 dense_rank() over ()。 问题是:如何按特定列值及其来自另一列的适当值对结果进行排序?

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

选择后我有什么:

| 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):

| ID | NAME  | VALUE |
| 4  | name2 | 55    |
| 4  | name1 | 12    |
| 3  | name1 | 13    |
| 3  | name2 | 23    |
| 3  | name3 | 44    |
| 5  | name2 | 89    |
| 5  | name1 | 14    |

【问题讨论】:

    标签: sql postgresql sql-order-by


    【解决方案1】:

    您可以按顺序使用窗口函数。所以我认为你想在外部查询中使用order by

    order by min(value) over (partition by id), id
    

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

    【讨论】:

      猜你喜欢
      • 2015-08-14
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 2013-03-06
      • 2023-03-12
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      相关资源
      最近更新 更多