将具有相似字符串的行分组

Jan*_*ith 5 sql postgresql aggregate

我搜索了很多,但大多数解决方案都是串联选项,而不是我真正想要的。

我有一个表X(在 Postgres 数据库中):

anm_id  anm_category anm_sales
1       a_dog        100
2       b_dog        50
3       c_dog        60
4       a_cat        70
5       b_cat        80
6       c_cat        40
Run Code Online (Sandbox Code Playgroud)

我想通过将 'a_dog'、'b_dog'、'c_dog' 分组为狗,将 'a_cat'、'b_cat'、'c_cat' 分组为猫来获得总销售额。

我无法更改表中的数据,因为它是外部数据库,我只能从中获取信息。

如何使用 SQL 查询来做到这一点?它不需要特定于 Postgres。

Pரத*_*ீப் 5

使用case语句将相同类别的动物分组在一起

SELECT CASE 
         WHEN anm_category LIKE '%dog' THEN 'Dogs' 
         WHEN anm_category LIKE '%cat' THEN 'cats' 
         ELSE 'Others' 
       END            AS Animals_category, 
       Sum(anm_sales) AS total_sales 
FROM   yourtables 
GROUP  BY CASE 
            WHEN anm_category LIKE '%dog' THEN 'Dogs' 
            WHEN anm_category LIKE '%cat' THEN 'cats' 
            ELSE 'Others' 
          END 
Run Code Online (Sandbox Code Playgroud)

此外,此查询应该适用于大多数数据库。