2012-11-08 43 views
0

我的表中的數據:SQL查詢來組特定條件計由

id  fieldId Name Text 
---- ------ ----- ---- 
1  101 name1 a1 
2  102 name2 a2 
3  101 name1 a1 
4  103 name3 a2 
5  102 name2 a3 
6  101 name1 c1 
7  101 name1 a3 
8  102 name2 
9  101 name1 b2 
10  103 name3 c1 

我需要輸出像

Name Count(fieldId) Count_id_text_is_either_a1_or_a2_a3 
------  ------  ------- 
name1 4     2 
name2 3     2 
name3 2     1 
  • Name =我需要按fieldId。
  • Count(fieldId) =計算每組記錄。
  • Count_id_text_is_either_a1_or_a2_a3 =這是我希望組的記錄數只有在Text like 'a1-%' or 'a2-%' or 'a3-%'

這可以通過單個查詢來完成嗎?如果是,請解釋如何?如果不是,那麼最有效的方法是什麼?

+0

你的數據樣本包括10行,但總的計數'(fieldId)'在預期的輸出是9。更具體地,它是'name1'即似乎誤計數:總共有5個條目,並3包含'a ...'值,但是相應地顯示了4和2.您是否需要計算* distinct *'Text'值? (在這兩種情況下?) –

回答

3
select Name, 
    count(*) as CountAll, 
    count(case when Text like 'a1-%' or Text like 'a2-%' or Text like 'a3-%' then 1 end) as CountA1A2A3 
from MyTable 
group by Name 

如果您願意,您也可以使用RegEx。

+0

這是正確的答案。 +1,但我忘了說,我需要通過類似運算符來比較fieldID ...你能幫助那個......嗎?看到我更新的問題 – Champ

+0

@Champ在上面看到我的更新 – RedFilter

0

這裏。

SELECT 
    `Name`, 
    COUNT(*) AS 'fieldId', 
    COUNT(IF(`Text` REGEXP '^a[1-3]',1,NULL)) AS 'a1a2a3' 
FROM (SELECT * FROM `items` GROUP BY `Name`,`Text`) t1 
GROUP BY `Name`;