我通过数据库表中的联接进行了选择,结果我的记录具有重复的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 |
答案 0 :(得分:0)
您可以按以下顺序使用窗口功能。因此,我认为您想在外部查询中使用order by
:
order by min(value) over (partition by id), id
请注意,最外面的查询中没有order by
。因此,不能保证结果将以任何特定顺序排列。子查询中的order by
不能保证外部查询中的排序。