我想构建一个使用不同正则表达式执行多个count(*)的查询。目前,它们都是一个长行,但我希望每个计数都在结果集中作为它们自己的行。
我有:
select
(select count(*) from table where text rlike 'genetics') as genetics,
(select count(*) from table where text rlike 'biology') as biology;
将“遗传学”和“生物学”作为列标题,将计数作为第1行值。 相同的“文本”可以在单独的计数中计算,它不需要仅对一个计数总数是唯一的。我只想要一个结果集。使用Mysql版本5.1.52。
答案 0 :(得分:3)
使用union all
:
(select count(*) from table where text rlike 'genetics')
union all
(select count(*) from table where text rlike 'biology')
我建议您添加另一个列,指定数据的来源。
事实上,我建议group by
:
select text, count(*)
from table
group by text;
您可以选择包含where text in ('genetics', 'biology')
。
答案 1 :(得分:2)
我想得到一个集合,其中计数在一列中,而正则表达式短语在另一列中,给出了一些名称。
以下是执行此操作的一种方法:
select regex, count(*)
from test t
join (
select 'biology' regex
union all
select 'genetics' regex
) r ON t.text rlike r.regex
group by r.regex
我们的想法是将实际的表test
加入"即兴表"由UNION
形成 - 将两个字符串文字组成一组行,并将它们称为regex
。加入条件使用查询中的rlike
条件。
这产生了正则表达式的笛卡尔积和它们匹配的文本。应用GROUP BY
可以生成所需的结果(demo.)。