如何使用正则表达式 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_101
、mySvr_102
、mySvr_201
、mySvr_202
.
现在,我想 group by
使用一些正则表达式 service
,这样结果将是 group by
,如下所示:mySvr_1xx
、mySvr_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;
我有一个 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_101
、mySvr_102
、mySvr_201
、mySvr_202
.
现在,我想 group by
使用一些正则表达式 service
,这样结果将是 group by
,如下所示:mySvr_1xx
、mySvr_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;