2017-03-17 19 views
0

我有一個查詢下面給出,沒有得到不同的字符串的計數 - MySQL的

select device_id,CAST(device_dtt_st as date),count(*) as g,'' as s,'' as m 
from event_data_170309 
where device_id ='8D-15-DB'and raw_data like %GPRS%' 
group by CAST(device_dtt_st as date) 
union 
select device_id,CAST(device_dtt_st as date),'' as g,count(*) as s,'' as m 
from event_data_170309 
where device_id ='8D-15-DB' and raw_data like '%SMS%' 
group by CAST(device_dtt_st as date) 
union 
select device_id,CAST(device_dtt_st as date),'' as g,'' as s,count(*) as m 
from event_data_170309 
where device_id ='8D-15-DB'and !(raw_data like '%SMS%' or raw_data like '%GPRS%') 
group by CAST(device_dtt_st as date); 

,我得到了輸出兩個不同行,但我希望在數只有一行。

enter image description here

看到下面的情景, enter image description here

+0

對不起工作。我不明白這個問題,你只想要一個查詢的計數? – ImAtWar

+0

無我有是有像「GPRS」,「短信」等字符的一個長字符串我想通過字符計數一行 – Annu

+0

感謝@大衛Makogon我無法在這裏格式化查詢 – Annu

回答

2

聯盟將只返回多行。

您將需要包裝所有這些查詢與另一個查詢,然後指望它。 ex。

select count(param), sum(param), param 
from 
    (
     select param as param, count(param) 
     union 
     another query with same column output 
     union 
     yet another query with same column output 
    ) as childQuery 
group by childQuery.param 

編輯 增加了一個聚合函數,無論你想使用。

EDIT2

SELECT 
    DEVICE_ID, 
    DATE, 
    SUM(IF(DATA LIKE %SMS%,1,0)) AS TOTAL_SMS, 
    SUM(IF(DATA LIKE %GPRS%,1,0)) AS TOTAL_GPRS, 
    SUM(IF(DATA NOT LIKE %GPRS% AND DATA NOT LIKE %SMS%,1,0)) AS TOTAL_OTHER, 
FROM 
    YOUR_TABLE T 
GROUP BY 
    T.DATE 

上面的查詢會爲你所需的輸出

+0

感謝您的幫助,但仍然沒有獲得期望的輸出 – Annu

+0

您可以在這裏添加所需的輸出 – Akshay

+0

@Annu你得到了什麼? –

相關問題