SQL: рассчитывать на разные случаи с одним запросом - PullRequest
0 голосов
/ 03 сентября 2018

Например, у меня есть таблица с записями пользовательских действий по просмотру и загрузке файлов,

file_id    user    activity
      2     Tim        view
      1     Ron        view
      1     Ron        view
      2     Tim    download
      2     Ron        view
      1     Ron        view
      2     Ron    download

Идеальный результат выбора такой,

file_id    viewed_by    views    downloaded_by    downloads
      1            1        3                0            0
      2            2        2                2            2

Что я могу сделать, так это получать данные о просмотрах и загружать данные в 2 независимых запроса,

COUNT(*), COUNT(DISTINCT user)
FROM table
WHERE activity = 'view'
GROUP BY file_id

(and then do another query for downloads)

Возможно ли сделать это в одном запросе или с помощью подзапроса?

1 Ответ

0 голосов
/ 03 сентября 2018

Вы можете попробовать использовать условное агрегирование только для подсчета строк, где действие соответствует либо просмотрам, либо загрузкам с использованием выражений CASE.

SELECT file_id,
       count(DISTINCT CASE activity
                        WHEN 'view' THEN
                          user
                      END) viewed_by,
       count(CASE activity
               WHEN 'view' THEN
                 user
             END) views,
       count(DISTINCT CASE activity
                        WHEN 'download' THEN
                          user
                      END) downloaded_by,
       count(CASE activity
               WHEN 'download' THEN
                 user
             END) downloads
       FROM elbat
       GROUP BY file_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...