2014-06-13 20 views
0

MySQL表「DemoTable」(ID - >自動遞增)如何獲得重複的行數在MySQL

id subject_id subject_name question exams 
1  3   sub3   ques1 e1,e4 
2  3   sub3   ques2 e1 
3  2   sub2   ques3 e1 
4  2   sub2   ques4 e3,e5 

我要的是這個下面的輸出where子句 - where exams like '%e1%'

subject_id subject_name number_of_questions 
    3   sub3   2 
    2   sub2   1 

目前,我使用兩個單獨的查詢 -

爲了獲得主題名稱的名單 -

Select Distinct subject_id, subject_name from DemoTable where exams like '%e1%' 

要獲得問題的數量每個主題都有 -

SELECT COUNT(*) as `num` FROM DemoTable where subject_id=$subject_id 

但對於我的工作,我需要一個查詢做這兩項工作,正如我上面提到的。 如何做到這一點?

編輯 - 1.正如 「于爾根·d」,在他的回答中提到 -

SELECT subject_id, subject_name, COUNT(distinct question) as questions_count 
FROM DemoTable 
where find_in_set('e1', exams) > 0 
group by subject_id, subject_name 

在此查詢find_in_set('e1', exams) > 0作品,但只是作爲exams='e1' NOT exams like '%e1%'這是我的情況。

任何方式使用likefind_in_set

謝謝。問候,

回答

2
SELECT subject_id, subject_name, COUNT(distinct question) as questions_count 
FROM DemoTable 
where find_in_set('e1', exams) > 0 
group by subject_id, subject_name 
+0

'FIND_IN_SET( 'E1',考試)>僅在0'工程'考試=%E1% '' 我甚至嘗試'FIND_IN_SET「e1''不一樣,如果'喜歡考試工作' ('%e1%',考試)> 0',但沒有運氣。 如何獲得'like'的值? –

+0

如果該功能對您不適用,我不確定您是否嘗試去做。請添加更多示例數據和預期輸出 –

+0

我想說的是,只有在find_in_set(string,column_name)'中的字符串值完全相等時,您所建議的查詢才能完美工作,正如您將它放在find_in_set('e1' ,考試)'。 **但在我的情況下,列'檢查'有多個字符串**(請參閱上面的表結構,'考試'有'e1,e4')。所以我需要使用'like',以便查詢可以在'考試'列中包含具有值'e1,e4'的行。 'find_in_set('e1',考試)'包括在考試列中只有'e1'的行,並且不包括具有多個值的例如'e1,e4'希望這次我很清楚。 –