包含 group_concat 的 mysql select 语句

标签 mysql group-concat

我有一个像这样的mysql语句

SELECT distinct mk.gene as gene, qs.rs as snp, CONCAT (qs.A1, qs.A2) as genotype
FROM dallas.QS_base qs  cross join   
dallas.staging mk 
     ON qs.rs = mk.rs 
WHERE qs.sampleID = 'mydna' 
order by gene ASC;

返回这种类型的输出

'ACE'    'RS4343',    'AA'
'ACTN3'  'RS1815739'  'TC'

来自这种类型的表(dallas.staging)

'heart health', 'ACE', 'RS4343'
'skin health', 'ACE', 'RS4343'
'sports performance', 'ACE', 'RS4343'
'sports performance', 'ACTN3', 'RS1815739'
'longevity', 'ACTN3', 'RS1815739'

还有这个 (dallas.QS_base)

'mydna','RS4343','A','A'
'mydna','RS1815739','T','C'

我应该如何更改上面的 mysql 语句才能获得此输出?我相信我需要使用 group_concat 命令。

'ACE'    'RS4343',    'AA' '(heart health, sports performance, skin health)'
'ACTN3'  'RS1815739'  'TC' '(sports performance, longevity)'

最佳答案

此查询应该为您完成这项工作(请注意,mk.gene 上的不同值不是必需的,因为您要按它进行分组):

SELECT mk.gene as gene, qs.rs as snp, CONCAT (qs.A1, qs.A2) as genotype, GROUP_CONCAT(mk.condition) AS conditions
FROM QS_base qs  cross join   
staging mk 
     ON qs.rs = mk.rs 
WHERE qs.sampleID = 'mydna'
group by gene
order by gene ASC;

输出:

gene    snp         genotype    conditions
ACE     RS4343      AA          heart health,sports performance,skin health
ACTN3   RS1815739   TC          sports performance,longevity

关于包含 group_concat 的 mysql select 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49817338/

相关文章:

java - 超过锁定等待超时;尝试重启事务

php - 如何获取数据库中特定行的相应 user_id(自动递增)值?

mysql - 尝试使用逗号分隔列表进行选择时出错

mysql - FK 在创建表时导致崩溃

sql - 用于搜索 CSV(或类似数组)的 MySQL 命令

mysql - jdbc4.MySQLSyntaxErrorException : Unknown database

mysql - 我如何将分隔符作为 MySQL GROUP_CONCAT 中的变量传递?

mysql - 如何破解 MySQL GROUP_CONCAT 以获取有限数量的行?

mysql - Group_concat在具有值数组的行上

MySQL GROUP_CONCAT 分配增量值