2017-01-06 1 views
1

Ich bin ein neues Gesicht zu SQL. Angenommen, ich eine Reihe von Daten:Wie man Daten mit spezifiziertem Wort zählt?

================== 
|| iphone6  || 
|| iphone7  || 
|| iphone7s  || 
|| Android 7.1 || 
|| Android 6.3 || 
================== 

Und ich mag, wie dies das Ergebnis erhalten:

||Model  ||Amount || 
========================== 
||iphone  ||  3|| 
||Android ||  2|| 
========================== 

Und wie dies mein Code:

SELECT 
CASE 
    WHEN model LIKE '%Android%' THEN 'Android' 
    WHEN model LIKE '%iPhone%' THEN 'IPhone' 
END, 
, COUNT(*) AS Amount FROM #table GROUP BY model; 

Aber meinen Ausgang ist:

||Model  || Amount|| 
========================== 
||IPhone ||   1|| 
||IPhone ||   1|| 
||IPhone ||   1|| 
||Android ||   1|| 
||Android ||   1|| 
========================== 

Wie ca n Ich repariere es?

+1

Sie sind fast da. Machen Sie diese Änderung in Ihrer Abfrage: '... CASE WANN Modell wie '% Android%' THEN 'Android' WANN Modell wie '% iPhone%' dann 'IPhone' END AS Marke ....... GROUP BY brand' – 1000111

+1

Ihr Code ist nicht MySQL. Bitte markieren Sie die Datenbank, die Sie wirklich verwenden. –

+0

Wenn es nicht SQL ist, was ist es dann? –

Antwort

4

Sie müssen nur durch die Spalte aggregieren Sie erstellen:

SELECT (CASE WHEN model LIKE '%Android%' THEN 'Android' 
      WHEN model LIKE '%iPhone%' THEN 'IPhone' 
     END), 
     COUNT(*) AS Amount 
FROM #table 
GROUP BY (CASE WHEN model LIKE '%Android%' THEN 'Android' 
       WHEN model LIKE '%iPhone%' THEN 'IPhone' 
      END); 
+1

@IvanCheung Beachten Sie, dass für dieses spezielle Beispiel das erste '%' unnötig ist. In einer entsprechend indizierten Tabelle wird diese Abfrage schneller ausgeführt. – Strawberry

+0

@Strawberry. . . Tatsächlich würde ein Index wahrscheinlich nicht für eine "Fall" -Anweisung verwendet werden. Sie scheinen diese Logik mit der Logik einer Wo-Klausel zu verwechseln. –

+0

wirklich? Gut zu wissen, danke. – Strawberry

Verwandte Themen