MIMIC-III数据库的应用(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_40466280/article/details/80960141

MIMIC-III数据库的应用(一)

MIMIC-III是由麻省理工学院计算生理学实验室开发的公开可用数据集,其中包含了>60000次住院相关的数据,时间跨度为2001-2012年,包括人口统计学,生命体征,实验室测试、药物等。Nature上的一篇文献描述了该数据库(http://www.nature.com/articles/sdata201635)。

关系型数据库与SQL

关系数据库是通过共享的键连接在一起的表的集合。这种组织方式有利于保持数据的完整性并实现更快的分析和更高效的存储。
SQL(Structured Query Language),结构化查询语言是一种数据库查询和程序设计语言,用于存取数据及查询、更新和管理关系数据库系统。其最基本的代码为:

SELECT *
    FROM table

SELECT 选择表格总的列,FROM表示选择的表格。例如,选择MIMIC-III数据库中「patients」表格中患者的ID,出生日期,以及性别:

    SELECT subject_id,dob,gender
    FROM mimiciiii.patients 

WHERE 语句的运用

有时候,我们查询的时候需要查询符合某个条件的数据,而不是整个表格,例如找到所有女性的患者,那么需要使用WHERE关键词。如:

SELECT *
FROM mimiciii.patients
WHERE gender = 'F'

除了使用「=」外,还可以使用其他的比较运算符,如:
- 「\<>」:不相等
- 「>= 」:大于等于
- 「>」:大于
- 「\<=」:小于等于
- 「\<」:小于
这些比较运算符可用于数字、日期、字符等数据类型的值进行比较。
除了以上的比较运算符外,还有NOT、OR、AND等逻辑运算符。「NOT」运算符可以用来否定某一个条件,「AND」表示同时符合两个条件,「OR」表示符合其中任意一个条件。
在表示符合任意一个条件是,如果条件过多,可以使用「IN」来进行代替,如下面的代码:

    SELECT *
    FROM patients
    WHERE subject_id = 109
    OR subject_id = 117
    OR subject_id = 127;

这样每次都要写一个条件过于繁琐,「IN」可以很好的代替,如:

SELECT *
FROM patients
WHERE subject_id  IN (109117127)

ORDER BY 语句的运用

ORERBY BY 语句用于排序,可以指定一列进行排序,如下面代码按照出生日期进行排序:

SELECT subject_id,dob
FROM patients
ORDER BY dob;

使用 JOIN 关联多个表

多个表的联结需要使用「JOIN」语句。联结运算简单的说就是将其他表的列添加进来,组成一张表。「JOIN」语句有两种形式,一种叫做「内联结」,表达式为「INNER JOIN」;另一种是外联结,表达式为「LEFT JOIN」或「RIGHT JOIN」。这两种联结方式得到的结果会完全不同。
使用内联结,将选出同时存在于两张表的数据,对于只存在一张表中的数据,不会出现在最后的结果中。而外联结会以一张表为主表,并在最后的结果中保留主表的所有数据,主表通过「LEFT」或「RIGHT」来指定。

JOIN 语句的语法

JOIN语句写在FROM语句之后,并且用「ON」来匹配两个表的相同列,如:

    SELECT p.subject_id,p.dob,a.hadm_id,a.admittime
    FROM patients p
    INNER JOIN admissions a
    ON p.subject_id = a.subject_id

在「ON」下面可以加上「WHERE」语句进行条件的筛选。

函数的使用

SQL中可以使用各种各样的函数来进行计算,这个网站列出来大部分函数。函数的使用可以方便我们计算相关的数值。以下代码利用cast()函数进行患者年龄的计算:

    SELECT p.subject_id, p.dob, a.hadm_id, a.admittime,
       round( (cast(a.admittime as date)-cast(p.dob as date))/365.2 )as age
    FROM mimiciii.patients p
    INNER JOIN mimiciii.admissions a
    ON p.subject_id = a.subject_id

cast()函数可以将某一种数据类型转换为另一种数据类型, 在上述的例子中,将其转化为日期,并通过(住院日期-出生日期)/365来计算年龄。
round()函数为四舍五入,将计算的年龄四舍五入为整数。

临时表的建立

在上述代码中,我们无法直接用WHERE 语句筛选出大于18岁的成年人,会提示没有age这一列,此时可以使用创建临时表的方法来进行查询,如:

WITH patients_age AS (
SELECT p.subject_id, p.dob, a.hadm_id, a.admittime,
   round( (cast(a.admittime as date)-cast(p.dob as date))/365.2 )as age
FROM mimiciii.patients p
INNER JOIN mimiciii.admissions a
ON p.subject_id = a.subject_id
)
SELECT *
FROM patients_age 
WHERE age >=18

同样,使用这种方法,可以将复查的查询分割成几块简单的查询,从而便于操作。

猜你喜欢

转载自blog.csdn.net/weixin_40466280/article/details/80960141