【发布时间】:2019-09-05 22:27:01
【问题描述】:
我有一个包含 3 列的表格。我需要生成基于特定"diagnosis" 执行的表的值(在“测试”列中)的combinations(总是在 3's)。参考下表,对于每个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 文件中读取数据来实现这一点。
【问题讨论】: