大家好,我是ANGUS,上一期我们已经介绍完了所有的26个表格,那么现在开始学习如何提取数据。
我们之前建立数据库是基于Postgers建立的,它是一个关系数据库,可以像其他RDB关系数据库一样使用SQL命令,即结构化查询语言(Structured Query Language)来进行查询,SQL命令包括三大类,
1. DQL:
数据查询语句,基本就是SELECT语句
2. DML:
数据操作语言,用于数据库的插入、更新、删除数据
3. DDL:
数据定义语言,主要用于创建、删除,以及修改表、索引等
我们需要掌握的就只有第一类DQL命令就行。整个命令过程包括以下3个部分。
前面提到,整个DQL的核心就在一个SELECT语句,那么我们现在来学习一下如何使用。
一个完整的SELECT语句可以简单到一句话,也可以复杂到上百行的代码,大致如下图,我们由浅入深一步一步讲,尽量通俗,讲点实用的,对于较繁杂的,会提供现成的模板给大家用,告诉大家模板怎么用就行。
图中SELECT、DISTINCT、AS、FROM、WHERE等称之为关键字,在你实际操作时不一定要大写,但代码执行过程中会自动转化为大写,同时关键词大写便于后期代码阅读。
SQL命令和自然语言很接近,我们十分容易理解,接下来通过几个问题来学习。
问题 1数据库里一共有几例病人?
➤ 翻译:How many are admissions in the database?
➤ 转化:Select count of admissions from the admissions table.
➤ 整理:Select count of admissions from the admissions table.
➤ SQL:
这是我们的第一个SELECT语句,SELECT后面接的是我们要选择的表格的栏,FROM后面接的是我们要查询的表格,关键字COUNT就是起的计数的作用
问题 2数据库里病人入院类型有哪些?
➤ 翻译:What’s the admission types of patients?
➤ 转化:Select admission types from the admissions table.
➤ 整理:Select admission types from the admissions table.
➤ SQL:
这里的关键字DISTINCT起的分类作用,它会删除结果中重复的行。
问题 3数据库里病人入院类型为“EMERGENCY”的共有几例?
➤ 翻译:How many are there that cases’ admission type is ‘EMERGENCY’?
➤ 转化:Select count of admissions from the admissions table where the admission type is ‘EMERGENCY’.
➤ 整理:Select count of admissions from the admissions table where the admission type is ‘EMERGENCY’
➤ SQL:
这里的关键字WHERE起限制作用,只统计admisstion type为EMERGENCY的行,同时我们也注意到,因为EMERGENCY为纯文本,所以我们需要在两边加上英文格式单引号 ’ 。
问题 4我已经知道了入院类型为“EMERGENCY”的例数有几例,但我还想知道其他类型的各有几例。
➤ 翻译:What’s the cases’ amout of each admission type?
➤ 转化:Select the count of each admission type from the admissions table.
➤ 整理:Select the count of each admission type from the admissions table.
➤ SQL:
这里我们第一次出现了聚合函数GROUP BY,它起一个分组的作用,所以在这行代码执行后我们可以看到admisstion type的分组及各自的计数。
通过前面问题1~4我们对简单查询已经有了一个初步的了解,那么接下来我们来学习一下如何进行多表操作。
问题 5我想了解一下病人入院时的年龄信息。
➤ 翻译:What’s patients’ age in the database.
➤ 转化:Select the patient ID, admission ID and the computed age from the admissions table and patients table.
➤ 整理:Select the patient ID, admission ID and the computed age from the admissions table and patients table.
➤ SQL:
这里我们进行了首次的多表查询。
1
FROM部分列出所有要查询的表,表与表之间用英文格式逗号 , 隔开,另外我们可以在每个表后面加入缩写,比如上面的ad,这样在该SELECT语句中我们就可以用ad来代替admissions表。
2
SELECT部分因为出现了多个表格,所以我们需要在每一列前加入表格名以避免混淆,如ad.subject_id。中间ROUND这一大串起的作用是进行年龄计算,并将结果赋值到新的名为age的一栏,这里大伙可以拿来直接用,不做详解。这里最后的4表示小数点后的精确位数,如果想要进行调整,可以在这里修改。
3
WHERE部分因为进行了多表查询,所以在限制部分我们要进行一一匹配,多个限制条件用AND连接。
问题 6我想剔除问题5患者里的未成年人,最好能对患者年龄群体分组。
在问题5中,我们已经获取了年龄,那么进一步地进行分组就行了。
➤ SQL:
这里我们第一次出现了WITH … AS(…),这个语句的作用是建立一个临时的表格,图中我们建立了一个名为age_admit的临时表,如果想要建立多个临时表,那么表达式如下
同时在上图中我们第一次出现了条件语句CASE WHEN … THEN … ELSE … END AS …。这个语句光按照字面就已经很清晰了。前面提过,如果年龄>89岁,数据库重新调整了该部分患者的年龄,所以我们需要将这个部分的患者也分离出来。所以当age大于100时,显示为>89,当小于89,大于等于18时,显示为adult,以此类推,并将结果赋值在age_group这一栏里。
问题 7我想知道血清白细胞的化验itemid号,怎么找?
➤ 翻译:What’s the itemid of WBC?
➤ 转化:Select the itemids from d_labitems table where label like WBC.
➤ 整理:Select the itemids from d_labitems table where label like WBC.
➤ SQL:
结果如下:
所以我们要找的itemid是51300和51301。
在这里我们第一次碰到了模式匹配,~*表示的是一个查找后面引号里的文字,同时对大小写不敏感,如果需要连大小写一起匹配,那就去除星号*。
类似的,你还可以用来患者的诊断名等等。
在数据库使用过程中,我们经常会用到的还有JOIN功能,这里就不展开将了,一图胜过千言万语,具体如下图:
问题 8之前建立的表格都是临时表,那我如何将这些表格保存下来呢?
这里我们就要用到建立物化视图(Navicat里称实体化视图)。
table_name就是你要建立的表名称,然后把你的代码接在后面就行,执行后我们就可以在Navicat的实体化视图里看到保存下来的表格了。当然,你也可以直接将表格导出,不存储在Navicat里。
这样弄了半天后是否感觉还是有点麻烦呢,不要急,数据库工程师也是这么觉得的,所以他们把很多复杂的SQL文件直接写好给你们了。来来来,你们要的模板都在这里了!!!
https://github.com/MIT-LCP/mimic-code/tree/master/concepts
涵盖了各式重症评分,首日病人参数等各式信息,拿走不谢。如果访问不了,请自主 番羽 土啬。
到了这里,我们的MIMIC数据库就算是告一段落了,期间因为轮到抢救室,急门诊上班等等一度停稿,感谢各位的支持了,请继续关注医学方其他精品课程哦!
我是ANGUS,我们也许还会再见哦。
End
之前MIMIC数据库推文链接:
1.MIMIC-III重症医学公共数据库简介,临床医师们看过来~| 医学方临床数据挖掘专题
2.传说中的MIMIC-III(麻省理工公共临床数据库)怎么申请呢?| 医学方MIMIC数据库专题
3.如何获得MIMIC-III公共数据库使用权限?| MIMIC公共数据库专题
4.MIMIC-III公共数据库使用专题四 ——数据库安装(上)
5.如何将CSV数据文件载入到数据库中?MIMIC-III公共数据库使用专题五 ——数据库安装(下)
6.MIMIC数据库建好后该怎么做?MIMIC-III公共数据库使用专题(六)--病人人口学信息及院内周转信息
7.轻松玩转MIMIC数据库!MIMIC-III公共数据库使用专题七 ——表格内容(Ⅱ):监护室住院期间采集的各类信息
8.MIMIC-III公共数据库使用专题八——表格内容(Ⅲ):医院记录系统采集的各类信息
9.手把手教你MIMC:MIMIC-III公共数据库使用专题九——表格内容(Ⅳ):字典信息
征 稿 启 事「医学方」现正式向粉丝们公开征稿!内容须原创首发,与科研相关,一经采用,会奉上丰厚稿酬(300-2000元),详情请戳。
“医学方”始终致力于服务“医学人”,将最前沿、最有价值的临床、科研原创文章推送给各位临床医师、科研人员。
医学方已推出“实验室那些事儿”“SCI写作技巧”“文献精读与解析”“医学英语轻松学”“国自然基金申请”“临床数据挖掘”、“基因数据挖掘”、“R语言教程”、“医学统计学”、“微创动物实验培训”等多个专题课程,如需了解课程详细推文,可关注“医学方”公众号,点击“精品专题”进入
腾讯课堂:https://medfun.ke.qq.com
网易云课堂:http://study.163.com/u/ykt1467466791112
客服电话:15821255568
客服微信:yixuefang1234
温馨提示:医学方还设有专门的讨论群哦~各位明星导师都在群中,可以解答各位的遇到的问题,如有兴趣,可以加客服微信后加入群聊...