mysql-Google大查询中是否有任何方法可以从左向右一对一连接*无需重复使用*右边的任何行?
作者:互联网
我们在一个表中有一组患者,我们希望将每个患者与另一个表中的患者完全匹配-但我们需要成对的患者,因此我们不能将一个患者与一个以上的患者进行匹配.
左外部联接会添加匹配项的每一个匹配项-将患者与其他所有可能匹配的匹配项匹配-因此我们需要其他方法.
关于SO与第一行的匹配,我们看到了很多答案-但这使我们只有一名患者与其他多名患者匹配-而不是我们需要的一对.
有什么可能的方法来创建配对匹配而不在Google Big Query中的表之间重复? (即使采取了多个步骤.)
附录:这是示例表.很高兴看到一个使用此示例的SQL示例.
这是需要的.
Example Source Tables:
Table A
PatientID Race Gender
1 A F
2 B M
3 A F
Table B
PatientID
4 A F
5 A F
6 B M
Results Table Desired:
Table C
A.PatientID B.PatientID_Match
1 4
2 6
3 5
澄清:表A中的患者必须与表B中的患者匹配.(他们不能与自己表中的患者匹配.)
解决方法:
select min (case tab when 'A' then patientID end) as A_patientID
,min (case tab when 'B' then patientID end) as B_patientID
from (select tab
,patientID
,rank() over (order by race,gender) r
,row_number() over (partition by tab,race,gender order by patientID) rn
from ( select 'A' as tab,A.* from A
union all select 'B' as tab,B.* from B
) t
) t
group by t.r
,t.rn
-- having count(*) = 2
;
+-------------+-------------+
| a_patientid | b_patientid |
+-------------+-------------+
| 3 | 5 |
+-------------+-------------+
| 2 | 6 |
+-------------+-------------+
| 1 | 4 |
+-------------+-------------+
主要思想-
两个表中的行均按其属性(种族,性别)分为几组.
这是使用RANK函数完成的.
在每组属性(种族,性别)内,按表格的病人ID对行进行排序.
+-----+-----------+------+--------+ +---+----+
| tab | patientid | race | gender | | r | rn |
+-----+-----------+------+--------+ +---+----+
+-----+-----------+------+--------+ +---+----+
| A | 1 | A | F | | 1 | 1 |
+-----+-----------+------+--------+ +---+----+
| B | 4 | A | F | | 1 | 1 |
+-----+-----------+------+--------+ +---+----+
+-----+-----------+------+--------+ +---+----+
| A | 3 | A | F | | 1 | 2 |
+-----+-----------+------+--------+ +---+----+
| B | 5 | A | F | | 1 | 2 |
+-----+-----------+------+--------+ +---+----+
+-----+-----------+------+--------+ +---+----+
| A | 2 | B | M | | 5 | 1 |
+-----+-----------+------+--------+ +---+----+
| B | 6 | B | M | | 5 | 1 |
+-----+-----------+------+--------+ +---+----+
在最后阶段,按行的RANK(r)和ROW_NUMBER(rn)值将行划分为组(GROUP BY),这意味着每个组都有来自每个表的一行(如果没有匹配项,则只有一行)另一张表中的一行).
标签:google-bigquery,join,sql,mysql 来源: https://codeday.me/bug/20191112/2023961.html