如何使用正则表达式 select 分组

How to select group by with Regex

我有一个 table 列:itime, service, count.

我可以写这样一个SQL来查询一些结果:

SELECT
    toUnixTimestamp(toStartOfMinute(itime)) * 1000 as t,
    service,
    sum(count)
FROM myTable
WHERE
    -- aaa and bbb are two integers
    itime BETWEEN toDateTime(aaa) AND toDateTime(bbb)
    and service like 'mySvr_%'
GROUP BY
    service,
    t
ORDER BY t

它按预期工作。

对于service列,内容始终以mySvr_开头,例如mySvr_101mySvr_102mySvr_201mySvr_202 .

现在,我想 group by 使用一些正则表达式 service,这样结果将是 group by,如下所示:mySvr_1xxmySvr_2xx , mySvr_3xx

但我不知道怎么做。有人可以帮助我吗?

我们可以使用 case 语句指定模式,使用 GROUP BY 和 LIKE 获得所需的输出:

下面table,

    >>SELECT * FROM temp_table;
    +-------+------------+-------+
    | itime | service    | count |
    +-------+------------+-------+
    |     1 | mySvr_1234 |     2 |
    |     2 | mySvr_2123 |     3 |
    |     1 | mySvr_1233 |     4 |
    |     4 | mySvr_3212 |     3 |
    |     5 | mySvr_2317 |     2 |
    +-------+------------+-------+
    5 rows in set (0.00 sec)

代码如下:

    SELECT service,count(*),
     CASE
       WHEN service LIKE 'mySvr_1%' THEN '1st'
       WHEN service LIKE 'mySvr_2%' THEN '2nd'
       ELSE '3rd'
     END AS group_by_result
    FROM Whosebug
    GROUP BY
     CASE
       WHEN service LIKE 'mySvr_1%' THEN '1st'
       WHEN service LIKE 'mySvr_2%' THEN '2nd'
       ELSE '3rd'
     END;