Как отсортировать строки с дублированными идентификаторами по определенному значению в PostgreSQL? - PullRequest
0 голосов
/ 19 февраля 2019

Я сделал выбор с объединениями из таблицы БД, и в результате у меня есть записи с дублированными идентификаторами.Для ранжирования записей (в целях разбивки на страницы) я использую deep_rank () over () в PostgreSQL.Вопрос в следующем: как упорядочить результаты по определенному значению столбца и его соответствующему значению из другого столбца?

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    |

Например, я хочуупорядочить по ИМЯ: значение 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 голосов
/ 19 февраля 2019

Вы можете использовать оконные функции в порядке.Поэтому я думаю, что вы хотите order by для внешнего запроса:

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

Обратите внимание, что у вас нет order by в самом внешнем запросе.Следовательно, вам не гарантируется, что результаты будут в каком-то конкретном порядке.order by в подзапросах не гарантирует порядок во внешнем запросе.

...