如何在PostgreSQL中按特定值对具有重复ID的行进行排序?

时间:2019-02-19 12:06:12

标签: sql postgresql sql-order-by

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

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    |

1 个答案:

答案 0 :(得分:0)

您可以按以下顺序使用窗口功能。因此,我认为您想在外部查询中使用order by

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

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