Выберите предоставление приоритетных массивов только с одним значением

1

У меня есть таблица видео:

Изображение 174551

Как получить записи с лучшим определением запрашиваемой категории и игнорировать подобные.

SELECT [...] WHERE category IN(1,2,3,4);

Ожидаемый результат:

Изображение 174551

  • 0
    Почему вы получите id=2 а не id=6 или id=3 вместо id=5 ?
  • 0
    По моей логике: id 3 = 100% категория 3; id 5 = 50% категория 3 + 50% категория 4; Я ищу лучшую категорию точности
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ

Ключ состоит в том, чтобы найти подходящую category с наименьшей мощностью:

with given_data(cat) as (
    select * from unnest (array[1,2,3,4])
    )
select distinct on(cat) *
from urls
cross join given_data
where cat = any(category)
order by cat, cardinality(category);

 id |   url    | category  | cat 
----+----------+-----------+-----
  1 | example1 | {1,2,3,4} |   1
  2 | example2 | {2}       |   2
  3 | example3 | {3}       |   3
  4 | example4 | {4}       |   4
(4 rows)
  • 0
    Спасибо, я не знал эту функцию. Я безмерно благодарен. Огромное спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню