SQL Server: несколько операторов выбора из одной таблицы в одном запросе - PullRequest
1 голос
/ 21 марта 2019

Я работаю над двумя запросами, которые извлекают данные из одной таблицы. Я могу заставить их работать так, как мне хочется, но я бы хотел объединить их, если это возможно. Я пробовал решение в [ нескольких выборок COUNT из одной и той же таблицы в одном запросе , но не смог выяснить это. Вот то, над чем я работаю:

--goback 30 days start at midnight
declare @daysgoingback as int
set @daysgoingback = 90

declare @olderdate as datetime
set @olderdate = DATEADD(Day, -@daysgoingback, DATEDIFF(Day, 0, GetDate()))

--today at 11:59pm
declare @today as datetime
set @today = dateadd(ms, -3, (dateadd(day, +1, convert(varchar, GETDATE(), 101))))
print @today

--these are the two queries I'd like to combine:
select 
    avg(x.LogAlerts*1.0 / @daysgoingback) as 'Avg number of log alerts'
from
    (select count(*) as LogAlerts 
     from message_log_table 
     where msg_timestamp between @olderdate and @today) X

select 
    avg(x.MessagesDeleted*1.0 / @daysgoingback) as 'Avg number of messages deleted'
from
    (select count(*) as MessagesDeleted 
     from message_log_table 
     where msg_details like '%message deleted%' 
       and msg_timestamp between @olderdate and @today) X

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

«AVG» - это агрегатная функция, которая усредняет несколько строк. Ваш подзапрос "select count (*)" всегда возвращает ровно одну строку, поэтому вы не используете функцию AVG, как предполагалось.

Вы можете объединить два вида так:

   select   count(*) * 1.0 / @daysgoingback as 'Avg number of log alerts'
            , count(case when msg_details like '%message deleted%' then 1 end) * 1.0 / @daysgoingback as 'Avg number of messages deleted'
    from    message_log_table 
    where   msg_timestamp between @olderdate and @today;
1 голос
/ 21 марта 2019

Сделайте каждый запрос в CTE, а затем СОЕДИНИТЕ их.

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

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