简体   繁体   English

SQL查询以特定条件分组

[英]SQL query to count in group by with specific condition

My table data: 我的表数据:

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

I need output like 我需要像这样的输出

Name    Count(fieldId)  Count_id_text_is_either_a1_or_a2_a3
------      ------        -------
name1   4                   2
name2   3                   2
name3   2                   1
  • Name = I need to group by fieldId. Name =我需要按fieldId分组。
  • Count(fieldId) = Count each group records. Count(fieldId) =计算每个组记录。
  • Count_id_text_is_either_a1_or_a2_a3 = This is the column I want the count of records of group only if Text like 'a1-%' or 'a2-%' or 'a3-%' . Count_id_text_is_either_a1_or_a2_a3 =仅当Text like 'a1-%' or 'a2-%' or 'a3-%'这是我想要组记录记录的列。

Can this be done by single query? 可以通过单个查询完成吗? If yes the please explain how? 如果是,请说明如何? If no then what is the most efficient way to do this? 如果没有,那么最有效的方法是什么?

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

You could also use a RegEx if you wish. 如果愿意,也可以使用RegEx。

Here. 这里。

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`;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM