SQL查询根据特定条件对分组进行计数

Cha*_*amp 2 mysql sql database

我的表数据:

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
Run Code Online (Sandbox Code Playgroud)

我需要像这样的输出

Name    Count(fieldId)  Count_id_text_is_either_a1_or_a2_a3
------      ------        -------
name1   4                   2
name2   3                   2
name3   2                   1
Run Code Online (Sandbox Code Playgroud)
  • Name= 我需要按 fieldId 分组。
  • Count(fieldId)= 统计每组记录。
  • Count_id_text_is_either_a1_or_a2_a3= 这是我仅在以下情况下才需要组记录数的列Text like 'a1-%' or 'a2-%' or 'a3-%'

这可以通过单个查询来完成吗?如果是,请解释一下如何?如果不是,那么最有效的方法是什么?

Red*_*ter 5

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
Run Code Online (Sandbox Code Playgroud)

如果您愿意,也可以使用正则表达式。