首页 > 解决方案 > Python3 Sqlite3:如何计算重复项但从中省略子字符串

问题描述

我有一个表,其中包含一个名为Patient如下所示的列:

Patient
---------
Perez, MD
Perez, MD
Perez, MD
Perez
Perez
Ayoub, MD
Ayoub
.
.

等等 ....

我添加了这个查询

query = "SELECT Patient, COUNT(*) FROM Table GROUP BY Patient ORDER BY COUNT(*) DESC"

返回此结果:

[('Perez, MD', 3), ('Perez', 2), ('Ayoub, MD', 1), ('Ayoub', 1), ......]

但我想要得到这个结果的正确方法?

[('Perez, MD', 5), ('Ayoub, MD', 2), ......]

或这个:

[('Perez', 5), ('Ayoub', 2), ......]

标签: pythonsqlpython-3.xsqlite

解决方案


检查患者姓名是否包含,以及是否提取左侧部分以在 GROUP BY 子句中使用:

SELECT 
  CASE 
    WHEN INSTR(Patient, ',') = 0 THEN Patient
    ELSE SUBSTR(Patient, 1, INSTR(Patient, ',') - 1)
  END Name, 
  COUNT(*) counter 
FROM tablename 
GROUP BY Name 
ORDER BY COUNT(*) DESC

或删除任何出现的', MD'

SELECT 
  REPLACE(Patient, ', MD', '') Name, 
  COUNT(*) counter 
FROM tablename 
GROUP BY Name 
ORDER BY COUNT(*) DESC;

请参阅演示
结果:

| Name  | counter |
| ----- | ------- |
| Perez | 5       |
| Ayoub | 2       |

推荐阅读