【问题标题】:MYSQL: Issue with table queryingMYSQL:表查询问题
【发布时间】:2020-11-30 18:38:51
【问题描述】:

我在SQL 上的桌子上遇到问题querying。我有两张表:table 1 (8000 lines) 由一列仅包含唯一基因 id (ex. HxC4233)table 2 (20000 lines) 组成,两列包含与表一相似的基因 id,但存在具有相应基因长度的重复项(因此不是唯一的)。问题是一些相同的基因有不同的亚型(ex. HxC4233_i1, HxC4233_i2) 具有不同的长度,但我已经在两列中修剪了我的基因 id 以仅显示这一点 (HxC4233)。

我想创建一个查询,其中包含表一中的所有唯一基因 ID,以及表二中的基因对应基因长度。但我只希望拥有独特的基因长度,而不是全部。

我尝试编写命令来获得我想要的输出。但我收到了所有基因 ID 作为我的输出。这是我的命令:

SELECT DISTINCT uniqgene_id, allgene_len
--> FROM table1 RIGHT JOIN table2 
--> ON allgene_id = uniqgene_id; 

是否可以只输出我唯一的基因id,只提取其对应的基因长度?

DISTINCT 命令不考虑具有不同长度的相似基因。

我想要的输出是只有具有相应长度的唯一基因 ID。

我的输出应该包含大约 8000 行。

【问题讨论】:

  • 我认为在 select 中添加 distinct 对你来说应该很好,但我无法理解这个问题的要点,所以你可以根据 meta.stackoverflow.com/questions/271055/… 进行修改
  • 您不必向每个人道歉;)请发布您的输出结果如何。
  • 您能否举例说明表 1 和表 2 记录以及您从这些记录中查找的理想输出?
  • 但是首先你必须决定在表2中gene_id重复的情况下你要显示的基因长度值。最大还是最小?还是平均?然后使用 group by gene_id 得到 8000 行的结果。
  • SELECT uniqgene_id, MAX(allgene_len) FROM ... GROUP BY uniqgene_id

标签: mysql join


【解决方案1】:
SELECT DISTINCT allgene_id, MAX(allgene_len)
FROM table2 GROUP BY allgene_id;

没有必要为此连接表。

【讨论】:

    【解决方案2】:

    您可以使用以下查询为相应的gene_id选择最高gene_len的记录:

    select uniqgene_id, allgene_len
    from
    (SELECT uniqgene_id, allgene_len, dense_rank() over (partition by t1.uniqgene_id order by allgene_len desc) as rnk
    FROM table1 t1 left join t2
    ON t1.allgene_id = t2.uniqgene_id)
    where rnk = 1
    group by 1,2;
    

    【讨论】:

      猜你喜欢
      • 2010-10-18
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      相关资源
      最近更新 更多