2017-01-06 56 views
1

我是SQL的新面孔。 假設我有一組數據:如何用指定的單詞對數據進行計數?

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

而且我想要得到的結果是這樣的:

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

我的代碼是這樣的:

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

但我的輸出是:

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

how ca我解決了它?

+1

你幾乎沒有。在您的查詢中進行此更改:'... CASE 當模型LIKE'%Android%'然後'Android' 當模型LIKE'%iPhone%'然後'IPhone' END AS品牌....... GROUP BY品牌' – 1000111

+1

你的代碼不是MySQL。請標記您真正使用的數據庫。 –

+0

如果它不是SQL,那它是什麼? –

回答

4

你只需要通過你所創建的列彙總:

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請注意,對於此特定示例,第一個'%'是不必要的。在適當索引的表上,如果沒有它,這個查詢將運行得更快。 – Strawberry

+0

@Strawberry。 。 。實際上,索引可能不會用於「case」語句。你似乎把這個邏輯與「where」子句的邏輯混淆了。 –

+0

真的嗎?很高興知道,謝謝。 – Strawberry

相關問題