gpt4 book ai didi

mysql - 生成列中值的组合

转载 作者:行者123 更新时间:2023-11-29 15:39:45 25 4
gpt4 key购买 nike

我有一个包含 3 列的表格。我需要生成combinations (始终为 3)基于特定 "diagnosis" 执行的表的值(在“测试”列中) 。引用下表,对于每个cust_id有一个"diagnosis" "tests" 所基于的列进行了。现在,对于每个诊断值组,我需要在“测试”列中生成相应值的唯一组合。请注意,组合应始终包含 3 个值。

患者:

pat_id | diagnosis | tests

1001 | Thyroid | CAT
1001 | Thyroid | MRI
1001 | Thyroid | Blood

1001 | Tonsil | CAT
1001 | Tonsil | MRI
1001 | Tonsil | Blood
1001 | Tonsil | RAPID

1002 | Pneumonia | MRI
1002 | Pneumonia | Eliza

所以,对于pat_id = '1001'diagnosis = 'Thyroid'我们看到“测试”有 3 个不同的值。因此,只有 1 个唯一组合是可能的,即 {CAT, MRI, Blood} 。同样,对于 pat_id = '1001'diagnosis = 'Tonsil' ,我们看到“test”列中有 4 个不同的值。因此,将有 4 种组合,即 {CAT, MRI, Blood} , {CAT, MRI, RAPID} , {MRI, Blood, RAPID} & {CAT, blood, RAPID} 。对于 pat_id = '1002'仅存在两个唯一值。因此组合仅为 1,即 {MRI, Eliza}像这样,我需要为一组中的所有诊断值生成类似的组合,并输出比该表中其他组合出现次数最多的唯一组合。

请注意,任何时候都应使用 3 个值进行组合。

大约有25 Mil记录在这个表中。那么有没有什么方法可以在 MySQL 中有效地实现这一点,而不会对性能造成重大影响?

PS:如果需要,我们有一个 python 环境,可以通过从 csv 文件读取数据来实现这一点。

最佳答案

您可以使用自加入:

select p1.pat_id, p1.diagnosis, p1.tests, p2.tests, p3.tests
from patient p1 join
patient p2
on p1.pat_id = p2.pat_id and p1.diagnosis = p2.diagnosis and
p1.tests < p2.tests join
patient p3
on p2.pat_id = p3.pat_id and p2.diagnosis = p3.diagnosis and
p2.tests < p3.tests ;

即使在(pat_id、诊断、测试)上使用推荐的索引,由于查询将产生大量数据,速度也会很慢。

关于mysql - 生成列中值的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57807637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com