как отсортировать таблицу по количеству совпадений

есть sql таблица

date, color, name
01    5       1
05    2       3
02    8       5
04    4       3
07    1       5
06    9       3

как отсортировать по колонке name по количеству совпадений, что бы строки с "3" была первой

результат

date, color, name
06    9       3
05    2       3
04    4       3
02    8       5
07    1       5
01    5       1

Ответы (1 шт):

Автор решения: SwaD

Добиться такого результата можно с использование окной функции в сортировке

select 
  date,
  color,
  name
from table
order by count(*) over (partition by name) desc;

Ниже полный пример для воспроизведения.
Тестировал в PostgreSQl и Oracle

create table www (
a NUMBER, -- int4
b NUMBER, -- int4
c NUMBER  -- int4
);


insert into www values (1,2,3);
insert into www VALUES (1,3,4);
insert into www VALUES (2,4,5);
insert into www VALUES (2,4,7);
insert into www VALUES (2,4,8);
insert into www values (3,6,9);


select 
  a,
  b,
  c
 --count(*) over (partition by a) s
from www
order by count(*) over (partition by a) desc;
→ Ссылка