我对DB表中的joins进行了select操作,结果我得到了ID重复的记录。为了对记录进行排序(分页目的),我在PostgreSQL中使用dense_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 |发布于 2019-02-19 20:07:37
可以在order by中使用窗口函数。因此,我认为您需要在外部查询上使用order by:
order by min(value) over (partition by id), id请注意,在最外层的查询中没有order by。因此,您不能保证结果将以任何特定的顺序出现。子查询中的order by不保证外部查询中的排序。
https://stackoverflow.com/questions/54765965
复制相似问题