关于健康数据集的实践评估,我有个问题。我的任务是统计被诊断为精神分裂症的患者的急诊总次数,而任何患有icd10_category = f20的患者都需要记录所有记录。我最初认为我应该使用IF else语句,因为我来自后端思维,但是,我从来没有在sql中做过类似的事情,而且我很难找到这个问题的文档。下面是我理论上的代码模型,但我不知道这是否有效。有人能帮忙吗?这也是我第一次发帖,所以任何指导或建设性的批评都比严厉的判断要好:)
begin
declare @newId varchar
declare @sum int
select * from dbo.['Test dataset - SQL - Sep# 2021 $']
/*
If icd10_category == 'f20'
id=newId;
+=newId;
else
return;
return sum(newId);
*/发布于 2022-04-17 16:38:10
我认为要解决的一般问题是:您正在想象以过程样式编写的代码,然后尝试将其压缩到SQL形状的框中。
具体来说,您正在尝试设置变量并发出一系列指令来获得所需的东西。
这并不像您想象的那么好,因为SQL是一种声明性语言--您告诉数据库引擎您希望它给您提供什么,并让它来弄清楚细节(而不是盲目地给它一组指令,这是一种过程方法)。
因此,很难找到文档。最终,这需要使用SQL进行实践--学习一种不同的方法,并确定何时应用它。一旦你进入最佳状态,这是一种很好的做事方式。但就目前而言,让我们解决具体问题:
SELECT patient_id, COUNT(*) AS n_visits
FROM your_database.emergency_room_visits
WHERE icd10_category = 'f20'
GROUP BY patient_id现在,我缺少您的领域知识,所以在这里,我设想了emergency_room_visits是这样一个表:
patient_id | icd10_category | date | lots | of | other | stuff
-------------------------------------------------------------------
1 'f19' 2022-01-01 ...
2 'f20' 2022-01-01 ...
2 'f20' 2022-02-14 ...
3 'f20' 2022-02-15 ...这将取决于你来看真正的桌子,但我想:
每个记录(行)对应于一个病人访问急诊室( patient_id)
icd10_category病人将有一个名为icd10_category的东西(我猜想有几个值,但只有'f20'表示感兴趣的情况)如果我们有所有这些,那么我前面概述的查询将返回。
patient_id | n_visits
---------------------
2 2
3 1现在,让我们尝试理解这个查询:
SELECT patient_id, COUNT(*) AS n_visits
FROM your_database.emergency_room_visits
WHERE icd10_category = 'f20'
GROUP BY patient_id把它拆开:
WHERE icd10_category = 'f20'
SELECT从FROM的兴趣表SELECT才想返回每个病人的记录数,所以我们必须返回现在,回到SELECT
and
COUNT(*)是“与每个patient_id相关联的记录(行)数”的缩写,我们将其重命名为n_visits,因为这就是对这个数字的解释。(COUNT是一个聚合函数的示例,它将许多记录/行减少到一个结果)
希望你能明白我所说的“声明式”风格是什么意思。我们告诉数据库引擎我们想要什么。然后,它抓取您提到的表,对其进行一些处理,并以您请求的格式返回一个结果表。
https://stackoverflow.com/questions/71879387
复制相似问题