多个select count(*)语句在resultset中有自己的行

时间:2014-10-01 21:34:38

标签: mysql sql regex

我想构建一个使用不同正则表达式执行多个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。

2 个答案:

答案 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.)。