SQL: кластеризовать аналогичные значения столбца B, но «упорядочить» по столбцу A - PullRequest
0 голосов
/ 13 июля 2010

Допустим, у меня есть таблица с двумя столбцами, id и hash:

id     | hash
------------------
1      | bb
2      | aa
3      | aa
4      | bb

Мне нужно упорядочить их по id (по убыванию), но сгруппировать все строки с одинаковым значением. Алгоритм, который сделал это, например:

  • Соберите в отдельные подмножества таблицы так, чтобы столбцы, для которых hash был одинаковым, были вместе.
  • Сортировка подмножеств по максимальному значению id по убыванию.
  • Строки подмножеств по выбору могут быть отсортированы по id по убыванию.

Результат будет

id     | hash
------------------
4      | bb
1      | bb
3      | aa
2      | aa

Спасибо.

Ответы [ 2 ]

2 голосов
/ 13 июля 2010

В Postgres 8.4 ... (порядок по номеру - это просто псевдоним для столбца, по которому нужно упорядочить)

select id,hash, max(id) over (partition by hash) h
   from my_table order by 3 desc,1 desc;

OR

select id,hash
from my_table order by max(id) over (partition by hash) desc,
id desc
1 голос
/ 13 июля 2010

Будет ли что-то подобное полезным? ...

SELECT *
    FROM my_table MT1
    ORDER BY (SELECT MAX(id)
                  FROM my_table MT2
                  WHERE MT2.hash = MT1.hash) DESC,
             id DESC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...