Подзапросы на одной таблице - PullRequest
1 голос
/ 12 января 2020

Что я хочу сделать, это запустить подзапрос из той же таблицы в одном запросе, мой SQL ниже:

    SELECT 
        DATEPART(DAY, dateTimeCreated) AS DateClicked,
        COUNT(*) AS NumClicks
    FROM [dbo].[tbl_clicks]
    WHERE 0 = 0
        AND DATEPART(MONTH, dateTimeCreated) = 'GIVEN MONTH'
        AND DATEPART(YEAR, dateTimeCreated) = 'GIVEN YEAR'
    GROUP BY DATEPART(DAY, dateTimeCreated)
    ORDER BY DATEPART(DAY, dateTimeCreated);

Прямо вперед, и это дает мне ТОЧНО то, что я хочу - количество кликов в каждый день данного месяца в данном году.

 DateClicked | NumClicks
---+-------------+------------
1            | 102215
2            | 256415
3            | 241314
etc ...

Исходя из этого результата, я хочу выяснить, сколько из этих кликов попало в определенную категорию, то есть, сколько в социальные сети, сколько на электронную почту и т. Д. c. для КАЖДОГО дня (дневной итог, затем разбивка этого итога). Я могу получить это довольно легко, добавив еще один оператор AND к SQL,

AND clickType IN ( 'IDENTIFIER' )

, но это включает создание еще одного полного оператора; Я хочу получить эти результаты из одного запроса.

 DateClicked | NumClicks  |  Social |  Email | ...
---+-------------+--------------------------------
1            | 102215     |  38281  |  345   | ...
2            | 256415     |  12333  |  23    | ...
3            | 241314     |  44552  |  653   | ...
etc ...

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

1 Ответ

0 голосов
/ 12 января 2020

Просто используйте условное агрегирование:

SELECT DAY(dateTimeCreated) AS DateClicked,
       COUNT(*) AS NumClicks,
       SUM(CASE WHEN clickType = 'Social' THEN 1 ELSE 0 END) as social,
       SUM(CASE WHEN clickType = 'Email' THEN 1 ELSE 0 END) as email,
       . . . 
FROM [dbo].[tbl_clicks]
WHERE MONTH(dateTimeCreated) = 'GIVEN MONTH'
      YEAR(dateTimeCreated) = 'GIVEN YEAR'
GROUP BY DAY(dateTimeCreated)
ORDER BY DAY(dateTimeCreated);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...