2017-03-20 4 views
3

eine hypothetische Abfrage wie diese Gegeben:Gruppe von LIKE eines Spaltenwert

SELECT COUNT(*) 
FROM subscriptions 
GROUP by plan_type 

und eine Tabelle ähnlich der unten:

+----+-----------------------+-------------+--+ 
| 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 | | 
+----+-----------------------+-------------+--+ 

Wunschergebnis:

+-------+----------+ 
| count | type | 
+-------+----------+ 
|  2 | gold  | 
|  2 | silver | 
|  1 | platinum | 
+-------+----------+ 

Gibt es eine Möglichkeit, diese Einträge mit einer GROUP BY und einer LIKE-Anweisung (LIKE "Silber", LIKE "Gold", LIKE "Platinum) zu gruppieren ", etc)?

+1

Tag Ihre Frage mit der Datenbank Sie verwenden. –

+0

Post was wäre das gewünschte Ergebnis – Lamak

+0

@GordonLinoff aktualisiert, danke für den Tipp. – mdobrenko

Antwort

7

können Sie case verwenden:

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); 

Einige Datenbanken ermöglichen es Ihnen, in der GROUP BY eine Spalte Alias ​​zu verwenden.

+0

Genau das, was das OP gesucht hat, +1 – SqlZim

+0

Hmm Frage - warum ist es notwendig, LIKE-Anweisungen im SELECT-Teil der Abfrage zu verwenden? Würden die LIKE-Aussagen in der GROUP BY nicht ausreichen? – mdobrenko

+0

@Gordon Linoff Gute Antwort +1 ... Antwort wäre noch besser, wenn Sie die 'ORDER BY COUNT (*) DESC, Plan_Type ASC' enthalten, dann sollte die Abfrage das gewünschte Ergebnis geben: –

1

Sie können auf einige Zeichenfolgenfunktionen gruppieren, um Ihren Plantyp auf die gewünschte Teilzeichenfolge zu reduzieren.

SQL Server Beispiel:

SELECT 
    left(plan_type,charindex('_',plan_type)-1) as plan_type 
    , COUNT(*) 
FROM subscriptions 
GROUP by left(plan_type,charindex('_',plan_type)-1) 
0

wie Klausel hinzugefügt werden, sollte unter Abfrage arbeiten:

SELECT COUNT(*) AS count, 
(CASE WHEN plan_type LIKE 'silver%' THEN 'silver' 
      WHEN plan_type LIKE 'gold%' THEN 'gold' 
      WHEN plan_type LIKE 'platinum%' THEN 'platinum' 
     END) AS type 
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) 
Verwandte Themen