2014-12-11 3 views
0

Мне нужно рассчитать сумму общего значения счета для каждого отдельного дня прибытия (столбец в таблице базы данных), соответствующего столбцу system_name. My SQL запрос:sql-запрос для суммирования общего количества

SELECT system_name, COUNT(distinct arrival_time) AS c 
FROM  i2alarmlog 
WHERE Ack_status = 0 
AND  Direction='CAME' 
AND  system_name in('I2-tciu database', 
         'i2-vcs logging', 
         'Indus1 Vacuum', 
         'Indus2 TCIU', 
         'Indus2 Vacuum', 
         'Septum_SIP2', 
         'TL3 Vacuum') 
GROUP BY system_name 

UNION ALL 

SELECT 'sum' system_name, 
      Count(distinct arrival_time) 
FROM  i2alarmlog 
WHERE Ack_status=0 
AND  Direction='CAME' 
AND  system_name in('I2-tciu database' 
         ,'i2-vcs logging', 
         'Indus1 Vacuum', 
         'Indus2 Vacuum', 
         'Septum_SIP2', 
         'TL3 Vacuum') 

Когда я запускаю этот запрос SQL, то сумма будет показана как 1841, но на самом деле его 1845.

i2-vcs logging  2 
I2-tciu database 2 
Indus1 Vacuum  19 
Indus2 TCIU   120 
Indus2 Vacuum  1691 
Septum_SIP2   8 
TL3 Vacuum   3 
sum     1841 

ответ

1

В вашем втором запросе distinct части применяется ко всем данным. Это означает, что если у вас есть тот же arrival time для 2 разных продуктов, он будет учитываться только один раз, а не один раз для каждого продукта. Это объясняет разницу между ожидаемыми и фактическими результатами.

Что вы могли бы сделать вместо этого заключается в следующем:

;with cte as 
(SELECT system_name, COUNT(distinct arrival_time) AS c 
FROM  i2alarmlog 
WHERE Ack_status = 0 
AND  Direction='CAME' 
AND  system_name in('I2-tciu database','i2-vcs logging','Indus1 Vacuum','Indus2 TCIU','Indus2 Vacuum','Septum_SIP2','TL3 Vacuum') 
GROUP BY system_name) 

select system_name, c 
from cte 
union 
select 'sum', sum(c) as c 
from cte 

Demo

+0

спасибо .. У меня есть еще одно сомнение в том, как сохранить полученный результат в списке и отобразить его через jsp. Как и в случае с этим, отображается нуль. –

+0

Пожалуйста, создайте отдельный вопрос, чтобы получить помощь по этой проблеме. Вы можете связать этот вопрос с контекстом. Благодаря! –

+0

У меня уже есть http://stackoverflow.com/questions/27416457/null-is-being-shown-when-list-containing-data-from-database-is-displayed.but без помощи. –

1

Одним из решений является использование вложенное и рассчитать общую сумму примерно так:

SELECT system_name, COUNT(distinct arrival_time) AS c 
FROM  i2alarmlog 
WHERE Ack_status = 0 
AND  Direction='CAME' 
AND  system_name in('I2-tciu database','i2-vcs logging','Indus1 Vacuum','Indus2 TCIU','Indus2 Vacuum','Septum_SIP2','TL3 Vacuum') 
GROUP BY system_name 

UNION ALL 

select 'TotalSum' as TotalSum, sum(s.c) as TotalValue 
from 
(
    SELECT system_name, COUNT(distinct arrival_time) AS c 
    FROM  i2alarmlog 
    WHERE Ack_status = 0 
    AND  Direction='CAME' 
    AND  system_name in('I2-tciu database','i2-vcs logging','Indus1 Vacuum','Indus2 TCIU','Indus2 Vacuum','Septum_SIP2','TL3 Vacuum') 
    GROUP BY system_name 
) s 

С помощью этого решения был достигнут максимальный уровень агрегирования (сумма (сумма (количество))).

+0

Это сработало ... Можете ли вы рассказать мне, как сохранить полученный результат в списке и разослать его через jsp.Как, когда я это делаю, тогда null будет расплываться. –

+0

@SRY_JAVA, у меня нет каких-либо знаний по jsp related, но вы можете попробовать это: выберите * from () как –

+0

теперь также отображается нуль –

Смежные вопросы