Вопрос о COUNT (СЛУЧАЙ, КОГДА КАК 1) Возвращается к 1 - PullRequest
0 голосов
/ 18 апреля 2020
SELECT DATE_TRUNC('week',occurred_at) AS week,
   COUNT (DISTINCT e.user_id) AS weekly_users,
   COUNT (DISTINCT CASE WHEN e.device IN  ('macbook pro','lenovo thinkpad','macbook air','dell inspiron notebook',
      'asus chromebook','dell inspiron desktop','acer aspire notebook','hp pavilion desktop','acer aspire desktop','mac mini')
      THEN e.user_id ELSE NULL END) AS computer,
   COUNT(DISTINCT CASE WHEN e.device IN ('iphone 5','samsung galaxy s4','nexus 5','iphone 5s','iphone 4s','nokia lumia 635',
   'htc one','samsung galaxy note','amazon fire phone') THEN e.user_id ELSE NULL END) AS phone,
    COUNT(DISTINCT CASE WHEN e.device IN ('ipad air','nexus 7','ipad mini','nexus 10','kindle fire','windows surface',
    'samsumg galaxy tablet') THEN e.user_id ELSE NULL END) AS tablet
    from tutorial.yammer_events e
   WHERE occurred_at > '2014-04-28' 
   GROUP by 1
   ORDER by 1

Мне интересно, почему, если я изменяю тогда e.user_id на тогда 1, весь запрос возвращается к 1 вместо числа подсчета, я немного запутался с логикой c здесь.

Ответы [ 2 ]

2 голосов
/ 18 апреля 2020

Поскольку COUNT(DISTINCT <expr>) считает количество различных не- NULL значений.

Значение 1 является постоянным. Таким образом, есть только одно значение. Следовательно, он возвращает 1.

Если вы используете COUNT(1), то он будет считать количество строк. Тем не менее, это чаще всего пишется как COUNT(*).

1 голос
/ 18 апреля 2020

Если вы измените e.user_id на 1, то вам также следует изменить COUNT(DISTINCT ...) на SUM(...).

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