如何在mysql中获取两个不同的查询结果计数的总和?

时间:2012-01-05 11:24:41

标签: mysql count sum

我需要从类别+子类别+子类别

中获取文件总数

为此,我使用我的观点编写了这种查询。

select ((select count(*) from view_category where 1=1)+ (select count(*) from view sub category where 1=1) + (select count(*) from view subsub category where 1=1)) as cnt

返回计数值。但我想知道任何其他更好的方法可以获得相同的结果。

我试过这种方式,但它不起作用(How to SUM() multiple subquery rows in MySQL?

select sum(int_val) from((select count(*) from view_category where 1=1) as int_val union (select count(*) from view sub category where 1=1) as int_val union (select count(*) from view subsub category where 1=1) as int_val )

3 个答案:

答案 0 :(得分:1)

你不需要做一个联盟,并且可以从别名中拥有每个联盟...只要每个查询只返回一行,你就可以做各种疯狂的事情。通过忽略任何"加入"条件,你得到笛卡尔结果,但只有1记录的笛卡尔1:1:1

select
        ByCat.CatCount
      + BySubCat.SubCatCount
      + BySubSubCat.SubSubCatCount as Cnt
   from
      ( select count(*) CatCount
           from view_category ) ByCat,

      ( select count(*) SubCatCount
           from view_sub_category) BySubCat,

      (select count(*) SubSubCatCount
           from view_subsub_category ) BySubSubCat

另外想象一下,如果你需要sum()或AVG()也可以从其他元素中计算出来......你可以将它们放到一行中然后根据需要使用它。

答案 1 :(得分:0)

如果表格具有相似的结构,您可以使用UNION统一结果,然后执行一个COUNT(*)

答案 2 :(得分:0)

这对我有用

select count(*) from(
(select count(*) from view_category where 1=1) union (select count(*) from view sub category where 1=1) union (select count(*) from view subsub category where 1=1) ) AS int_val;