【问题标题】:Select giving priority arrays with only one value选择仅具有一个值的优先级数组
【发布时间】:2016-02-01 06:02:14
【问题描述】:

我有视频表:

如何获取对请求类别有更好定义的记录并忽略相似。

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

预期结果:

【问题讨论】:

  • 为什么你会得到id=2 而不是id=6id=3 而不是id=5
  • 在我的逻辑中:id 3 = 100 % category 3; id 5 = 50% 类别 3 + 50% 类别 4;我寻求最佳的准确性类别
  • 我知道这有点难以理解。我将尝试以不同的方式进行解释。假设一家公司需要组建一个编程团队来使用 PHP、JAVA、C++;即使有人知道这三种语言,我也想优先考虑那些在课程中拥有更多不同语言知识的人。我更喜欢带只懂 PHP 的人,而不是懂 10 多种编程语言的人。

标签: php sql postgresql


【解决方案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)

【讨论】:

  • 谢谢,我不知道这个功能。我非常感激。非常感谢。
猜你喜欢
  • 2021-07-08
  • 2020-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2021-06-01
  • 2012-07-27
相关资源
最近更新 更多