[英]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.