【问题标题】:Get list of people having matching skills using sql使用 sql 获取具有匹配技能的人员列表
【发布时间】:2022-01-16 17:18:07
【问题描述】:

I have 2 tables Task and Skill

任务表:

Task_id skill
1 x
1 y
2 x
2 z

技能:

agent_name skills
abc x
abc y
def y
def k
pqr x
pqr y
abc z

我想要可以处理某项任务的所有代理的列表, 这里代理 abc 和 pqr 具备完成任务 1 的所有技能

【问题讨论】:

  • 您好,您尝试了哪些代码,您尝试解决此问题的问题在哪里?
  • 你真正的数据库是哪一个?他们三个……
  • 是红移数据库

标签: sql amazon-web-services amazon-redshift


【解决方案1】:

如果您想选择具有超过所需技能的agent_name(但包含所需技能),您应该更改开启条件:

on t2.skills_for_task LIKE CONCAT('%', t1.skill_for_task, '%') ;

SELECT agent_name,task_id,skill_for_task
FROM
          (
             select task_id,group_concat(skill) as skill_for_task
             from task
             group by task_id
           ) as t1 
           
           INNER JOIN 
           
           (
             select agent_name,group_concat(skills) as skills_for_task
             from skill
             group by agent_name
           
           ) as t2 
on t2.skills_for_task LIKE CONCAT('%', t1.skill_for_task, '%') ;  

演示:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=66efe141b29b6d38ddf95e13b8ff1e68

结果:

agent_name    task_id skill_for_task
abc            1            x,y
pqr            1            x,y  

开启Postgres 13

SELECT agent_name,task_id,skill_for_task
FROM
          (
             select task_id,string_agg(skill,',') as skill_for_task
             from task
             group by task_id
           ) as t1 
           
           INNER JOIN 
           
           (
             select agent_name,string_agg(skills,',') as skills_for_task
             from skill
             group by agent_name
           
           ) as t2 
on t2.skills_for_task LIKE CONCAT('%', t1.skill_for_task, '%') ;

演示:https://dbfiddle.uk/?rdbms=postgres_13&fiddle=b1df46bb1bf750d7ec0ade979ba9a465

结果:

agent_name    task_id skill_for_task
abc            1            x,y
pqr            1            x,y

【讨论】:

  • 在这种情况下,如果代理有提取技能,那么它将不起作用。例如,如果代理 pqr 具有额外的技能 K,那么它将无法工作。
  • @BiswajeetPraharaj 请先仔细检查答案,然后评论它是否有效。答案的第一部分abc有一个额外的技能z,它可以工作dbfiddle.uk/…
  • 我试过了,但它不起作用。现在编辑数据集并向代理 abc 添加了一项技能。能否请您重新运行并让我知道结果。
  • @BiswajeetPraharaj 你有 MySQL 和 Postgres 的更新版本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
相关资源
最近更新 更多