跳至主要內容

1527. 患某种疾病的患者


1527. 患某种疾病的患者

🟢   🔖  数据库  🔗 力扣open in new window LeetCodeopen in new window

题目

Table: Patients

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| patient_id   | int     |
| patient_name | varchar |
| conditions   | varchar |
+--------------+---------+

patient_id is the primary key (column with unique values) for this table.

'conditions' contains 0 or more code separated by spaces.

This table contains information of the patients in the hospital.

Write a solution to find the patient_id, patient_name, and conditions of the patients who have Type I Diabetes. Type I Diabetes always starts with DIAB1 prefix.

Return the result table in any order.

The result format is in the following example.

Example 1:

Input:

Patients table:

+------------+--------------+--------------+
| patient_id | patient_name | conditions   |
+------------+--------------+--------------+
| 1          | Daniel       | YFEV COUGH   |
| 2          | Alice        |              |
| 3          | Bob          | DIAB100 MYOP |
| 4          | George       | ACNE DIAB100 |
| 5          | Alain        | DIAB201      |
+------------+--------------+--------------+

Output:

+------------+--------------+--------------+
| patient_id | patient_name | conditions   |
+------------+--------------+--------------+
| 3          | Bob          | DIAB100 MYOP |
| 4          | George       | ACNE DIAB100 |
+------------+--------------+--------------+

Explanation: Bob and George both have a condition that starts with DIAB1.

题目大意

患者信息表: Patients

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| patient_id   | int     |
| patient_name | varchar |
| conditions   | varchar |
+--------------+---------+

在 SQL 中,patient_id (患者 ID)是该表的主键。

'conditions' (疾病)包含 0 个或以上的疾病代码,以空格分隔。

这个表包含医院中患者的信息。

查询患有 I 类糖尿病的患者 ID (patient_id)、患者姓名(patient_name)以及其患有的所有疾病代码(conditions)。I 类糖尿病的代码总是包含前缀 DIAB1

任意顺序 返回结果表。

查询结果格式如下示例所示。

示例 1:

输入: Patients 表:

+------------+--------------+--------------+
| patient_id | patient_name | conditions   |
+------------+--------------+--------------+
| 1          | Daniel       | YFEV COUGH   |
| 2          | Alice        |              |
| 3          | Bob          | DIAB100 MYOP |
| 4          | George       | ACNE DIAB100 |
| 5          | Alain        | DIAB201      |
+------------+--------------+--------------+

输出:

+------------+--------------+--------------+
| patient_id | patient_name | conditions   |
+------------+--------------+--------------+
| 3          | Bob          | DIAB100 MYOP |
| 4          | George       | ACNE DIAB100 |
+------------+--------------+--------------+

解释: Bob 和 George 都患有代码以 DIAB1 开头的疾病。

解题思路

MySQL

  1. 返回字段
    使用 SELECT 返回 patient_idpatient_nameconditions

  2. 筛选条件

    • 使用 LIKE 运算符,匹配 conditions 列中包含以 DIAB1 开头的疾病代码。
    • 条件为:conditions LIKE 'DIAB1%' OR conditions LIKE '% DIAB1%'

复杂度分析

  • 时间复杂度O(n),假设表中有 n 条记录,LIKE 运算符会对每条记录扫描并匹配子字符串。
  • 空间复杂度:SQL 查询本身不占用额外空间,返回的结果占用的空间与记录数成正比。

Pandas

  1. 加载数据
    Patients 表加载到 Pandas 的 DataFrame 中。

  2. 筛选条件

    • 使用 Pandas 的 str.contains() 方法,筛选 conditions 列中包含以 DIAB1 开头的疾病代码的记录。
    • 正则表达式:r'(^| )DIAB1' 匹配以 DIAB1 开头的单词。
  3. 返回结果

    • 保留符合条件的记录,返回所有列。

代码

MySQL
SELECT patient_id, patient_name, conditions
FROM Patients
WHERE conditions LIKE 'DIAB1%' OR conditions LIKE '% DIAB1%'