2016-12-15 68 views
8

我在尋找以下問題的解決方案:計數多案例出現在SQL

SELECT CASE WHEN p.value LIKE '%foo%' THEN 'foos' 
    WHEN p.value LIKE '%bar%' THEN 'bars' 
    WHEN p.value LIKE '%bakar%' THEN 'bakars' 
    ELSE p.value END as value, 
COUNT(*) as count FROM table_a p GROUP BY value 

值是一樣的東西:

foo, bar, foo and bar, bakar, bakarbar, foobar 

這個查詢的結果是:

value count 
foos  3 
bars  2 
bakars  1 

此代碼成功地計算出現次數,但CASE在第一次匹配時停止。 有沒有辦法做到這一點?

value count 
foos  3 
bars  4 
bakars  2 
+0

這可能有助於http://stackoverflow.com/questions/5045124/count-case-and-when-statement-in-mysql – 2016-12-15 10:58:10

+0

你由其他值組。請向我們展示p.value的所有值 –

+0

@BerndBuffen,同一列。合格與否... – jarlh

回答

4

在單case的表情,你不能達到你想要的,正是因爲case停止第一場比賽。

您需要單獨使用case表達式或if()函數調用來實現預期結果。如果你不介意在不同列中的結果,然後使用條件計數:

select count(if(p.value LIKE '%foo%',1,null)) as foos, 
     ... 
from table_a p 

如果你堅持在同一列接收計數,然後使用union

select 'foos' as `value`, count(*) from table_a where table_a.value LIKE '%foo%' 
union 
... 
+0

我很害怕這種情況。在我的情況下,工會的數據太多了,所以我不得不尋找其他解決方案。謝謝。 – Kadel

+0

看看本主題中接受答案的動態部分:http://stackoverflow.com/questions/12004603/mysql-pivot-row-into-dynamic-number-ofcolumns – Shadow

4

您可以使用UNION如果要算超過1次出現在每個字符串:沒有

SELECT 'foos' as value, count(*) 
FROM YourTable 
WHERE p.value LIKE '%foo%' 
UNION ALL 
SELECT 'bars' as value, count(*) 
FROM YourTable 
WHERE p.value LIKE '%bar%' 
UNION ALL 
SELECT 'bakars' as value, count(*) 
FROM YourTable 
WHERE p.value LIKE '%bakar%' 
+0

雖然不適合我的案例,但這也是一個有效的答案,謝謝! – Kadel

1

試試這個:

SELECT 
    (select count(p1.value) from table_a p1 where p1.value LIKE '%foo%') as foos, 
    (select count(p2.value) from table_a p2 where p2.value LIKE '%bar%') as bars, 
    (select count(p3.value) from table_a p3 where p3.value LIKE '%bakar%') as bakars 
    FROM table_a p GROUP BY p.value 
+1

有趣的解決方案,把它放在行。我會研究一下。 – Kadel

3
select  w.word 
      ,count(*) 

from  table_a 

      join (  select 'foo' as word 
        union all select 'bar' 
        union all select 'bakar' 
       ) w 

      on value like concat('%',w.word,'%') 

group by w.word 
;   
+0

concat似乎對我有一些排序問題,我會進行調查。謝謝! – Kadel

+0

你可以請添加你的表DDL嗎?謝謝 –