Mysql 在医疗保健数据集上创建4个SQL查询,称为四切分方法
我有一个包含7万多行的表,类似于下面的数据Mysql 在医疗保健数据集上创建4个SQL查询,称为四切分方法,mysql,sql,Mysql,Sql,我有一个包含7万多行的表,类似于下面的数据 id | patient | date | provider ________________________________ 1 | bob | 2020-2-1 | dr joe 1 | bob | 2020-1-1 | dr joe 2 | tom | 2020-4-1 | dr ann 2 | tom | 2020-3-1 | dr joe 2 | tom | 2020-2-1 | d
id | patient | date | provider
________________________________
1 | bob | 2020-2-1 | dr joe
1 | bob | 2020-1-1 | dr joe
2 | tom | 2020-4-1 | dr ann
2 | tom | 2020-3-1 | dr joe
2 | tom | 2020-2-1 | dr joe
3 | jan | 2020-6-1 | dr ann
3 | jan | 2020-5-1 | dr ann
3 | jan | 2020-4-1 | dr joe
3 | jan | 2020-3-1 | dr joe
4 | ken | 2020-6-1 | dr ted
4 | ken | 2020-5-1 | dr ann
4 | ken | 2020-4-1 | dr joe
我需要从数据中提取以下报告
下面是所需数据的示例。这有点棘手,但您可以使用两个级别的聚合窗口函数:
select patient,
(case when max_cnt = total_cnt then 'One provider'
when max_cnt > 0.5 * total_cnt then 'One dominant provider'
when avg_cnt = max_cnt then 'Multiple equal'
else 'Two or more'
end) as grouping
from (select patient, provider, count(*) as cnt,
avg(count(*)) over (partition by patient) as avg_cnt,
max(count(*)) over (partition by patient) as max_cnt,
sum(count(*)) over (partition by patient) as total_cnt
from t
where date > curdate - interval 1 year
group by pateint, provider
) pp
group by patient;
编辑:
对于只看过一次的患者,只需使用聚合:
select patient
from t
group by patient
having max(provider) = min(provider);
如果你想的话,你可以用一个
where
子句来限制时间范围。非常感谢你,但我仍然在努力。如果可能的话,你会发布如何找到“只看过一个提供者的患者”吗?结果将是耐心的“鲍勃”。非常感谢你,工作完美!我想问一下也无妨,如果您能为报告2和报告3提供任何帮助,我们将不胜感激。我从表中删除了所有旧条目,因此日期/时间不再重要。例如,“看过多个提供者的患者,但大部分时间只有一个提供者。”@FHC。一个问题应限于一个问题。最初的答案实际上解决了所有四个问题。