首页 > 解决方案 > 包含给定条件mysql的计数和组

问题描述

我有用户提交的数据,措辞并不完全相同,但有相似之处,请参见下面的示例

 ---No  | Catergory
    526 HIV
    418 HIV/AIDs
    207 RVD
    86  HIV/AIDS.
    84  HIV INFECTION
    58  HIV PATIENT ON HAART
    54  RETROVIRAL DISEASE
    44  LIPODYSTROPHY
    39  MALARIA
    36  HIV MANAGEMENT
    36  Chronic Myeloid Leukemia

我想获得总数,以便将所有带有 HIV、HIV、Retro 的行归为一个这样的类别

    category | number
    ------------------
    HIV      |    1500
   ----------------------
    MALARIA  |    39
......

有什么建议么?

标签: mysql

解决方案


使用CASE表达式进行分组,如下所示:

SELECT
    CASE WHEN Category LIKE '%HIV%' OR Category LIKE '%Retro%'
         THEN 'HIV'
         ELSE Category END AS Category,
    COUNT(*) AS number
FROM yourTable
GROUP BY
    CASE WHEN Category LIKE '%HIV%' OR Category LIKE '%Retro%'
         THEN 'HIV'
         ELSE Category END;

您用于将各种类别映射到 HIV 桶的确切逻辑可能与我上面列出的不同。您可能只需要使用IN并与要映射的完整类别列表进行比较。


推荐阅读