1

私のテーブルデータ:

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-%'

これは単一のクエリで実行できますか?はいの場合、その方法を説明してください。いいえの場合、これを行うための最も効率的な方法は何ですか?

4

2 に答える 2

4
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

必要に応じて、正規表現を使用することもできます。

于 2012-11-08T17:24:56.237 に答える
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`;
于 2012-11-08T19:59:00.743 に答える