Строки суммы SQL в объединении - PullRequest
3 голосов
/ 23 февраля 2012

Я пытаюсь суммировать две строки, полученные из разных SQL-запросов в UNION, это возможно?Все, чего я могу достичь, - это две отдельные строки, но я не могу их СУММАТЬ, движок БД заставляет меня говорить, что в синтаксисе рядом с *) FROM (часть рядом с СУММ) ...* Вот запрос:

SELECT * FROM

(SELECT COUNT(*) as cntclients                                                                                               
   FROM                                                                                                                      
   (SELECT DISTINCT clientkey AS clients                                                                                     
      FROM <table>
     WHERE <conditions...>)                                                                                                                 
   ) AS clients                                                                                                              
) cntclients

UNION

(SELECT SUM(occurrences) AS cntclientsad                                                    
   FROM <table2>
   WHERE <conditions...>                                     
)

Это приводит меня к примеру:

cntclients
----------
901
50

Добавление SELECT SUM (*) FROM вместо SELECT * FROM в первой строке и окружающихдва запроса с круглыми скобками просто выдавали мне упомянутую ошибку ...

Я хотел бы

cntclients <- or whatever name...
----------
951

Есть идеи, как эта сумма должна работать?

Ответы [ 4 ]

11 голосов
/ 23 февраля 2012

На самом деле вам не нужно использовать UNION для этого - вы можете просто сложить их вместе вручную:

SELECT a.countKey + b.sumOccur as total
FROM (SELECT COUNT(DISINCT clientkey) as countKey
      FROM <table>
      WHERE <conditions>) as a
CROSS JOIN (SELECT SUM(occurrences) as sumOccur
            FROM <table2>
            WHERE <conditions>) as b
6 голосов
/ 23 февраля 2012
select SUM(cntcol)
from
(
    select count(*) as cntcol from sometables
    union all
    select SUM(occurrances) as cntcol from somemoretables
) ctquery
4 голосов
/ 23 февраля 2012

Вы также можете использовать:

SELECT 
    ( SELECT COUNT(DISTINCT clientkey) as countKey
      FROM <table>
      WHERE <conditions>
    ) 
  +
    ( SELECT SUM(occurrences) as sumOccur
      FROM <table2>
      WHERE <conditions>
    ) 
  AS total
3 голосов
/ 23 февраля 2012

Если вы хотите придерживаться UNION, вы можете написать это так:

SELECT sum(c.cntclients) as Totalcntclients 
FROM
(

   SELECT COUNT(*) as cntclients                                                                                               
   FROM                                                                                                                      
   (SELECT DISTINCT clientkey AS clients                                                                                     
      FROM <table>
     WHERE <conditions...>                                                                                                                
   ) AS clients                                                                                                              

  UNION

  SELECT SUM(occurrences) AS cntclientsad                                                    
   FROM <table2>
   WHERE <conditions...>                                     

) c
...