按列列值LIKE分组

mdo*_*nko 6 mysql sql

给出一个假设的查询,例如:

SELECT COUNT(*)
FROM subscriptions
GROUP by plan_type
Run Code Online (Sandbox Code Playgroud)

和下面的表类似:

+----+-----------------------+-------------+--+
| id |       plan_type       | customer_id |  |
+----+-----------------------+-------------+--+
|  1 | gold_2017             |         523 |  |
|  2 | gold_2016_recurring   |        2300 |  |
|  3 | silver_2016           |         234 |  |
|  4 | silver_2017_recurring |        2593 |  |
|  5 | platinum_recurring    |        4123 |  |
+----+-----------------------+-------------+--+
Run Code Online (Sandbox Code Playgroud)

期望的结果:

+-------+----------+
| count |   type   |
+-------+----------+
|     2 | gold     |
|     2 | silver   |
|     1 | platinum |
+-------+----------+
Run Code Online (Sandbox Code Playgroud)

有没有办法使用GROUP BY和LIKE语句对这些条目进行分组(LIKE"silver",LIKE"gold",LIKE"platinum"等)?

Gor*_*off 12

你可以使用case:

SELECT (CASE WHEN plan_type LIKE 'silver%' THEN 'silver'
             WHEN plan_type LIKE 'gold%' THEN 'gold'
             WHEN plan_type LIKE 'platinum%' THEN 'platinum'
        END) as plan_grp, COUNT(*)
FROM subscriptions
GROUP by (CASE WHEN plan_type LIKE 'silver%' THEN 'silver'
               WHEN plan_type LIKE 'gold%' THEN 'gold'
               WHEN plan_type LIKE 'platinum%' THEN 'platinum'
          END);
Run Code Online (Sandbox Code Playgroud)

某些数据库允许您在中使用列别名GROUP BY.