我有一個帶有列的表: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等。
但我不知道怎么做。有人可以幫助我嗎?
uj5u.com熱心網友回復:
我們可以使用 case 陳述句來指定模式以使用 GROUP BY 和 LIKE 獲得所需的輸出:
對于下表,
>>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 stackOverflow
GROUP BY
CASE
WHEN service LIKE 'mySvr_1%' THEN '1st'
WHEN service LIKE 'mySvr_2%' THEN '2nd'
ELSE '3rd'
END;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/353891.html
