Как взять сумму двух разных результатов запроса в MySQL? - PullRequest
1 голос
/ 05 января 2012

Мне нужно взять общее количество файлов из категории + подкатегория + подподкатегория

. Для этого я пишу этот вид запроса, используя мои представления.

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

Его возвращаемое количествозначение.Но я хочу знать, что любой другой лучший метод доступен для получения того же результата.

Я пробовал этот способ, но он не работает ( Как суммировать () несколько строк подзапроса в 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 ]

1 голос
/ 05 января 2012

вам не нужно делать объединение, и вы можете просто иметь каждый из них как свой псевдоним ... Пока каждый запрос возвращает только одну строку, вы можете делать всякие безумные вещи.Игнорируя любое условие «соединения», вы получите декартово значение, но декартово 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 ()рассчитывает тоже от других элементов ... Вы можете поместить их в один ряд и использовать так, как вам нужно.

0 голосов
/ 13 января 2012

Это работает для меня

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;
0 голосов
/ 05 января 2012

Если таблицы имеют схожую структуру, вы можете использовать UNION, чтобы объединить результат, а затем выполнить один COUNT(*).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...