Подсчет с существует в SQL - PullRequest
0 голосов
/ 01 мая 2019

Почему этот запрос не возвращает количество результатов? Как мне заставить его показать счет

SELECT COUNT (*) AS MWith
FROM member   m
JOIN Channel  mc ON mc.MemberID = m.id
JOIN Client   c  ON c.id = m.clientid
JOIN packages p  ON p.id = m.packageid
WHERE Enroll > '2018'
AND EXISTS  (
            SELECT * FROM
            activity a 
            WHERE a.memberid = m.id
            AND a.code IN ('785', 'a599')
            ) 
GROUP BY m.id;

OUTPUT

MWith
1
1
1

1 Ответ

1 голос
/ 01 мая 2019

Пустой набор из-за предложения group by.

Временные решения:

  1. Удалите GROUP BY, потому что m.id в любом случае не является частьюoutput
  2. Использование GROUP BY ALL

Оригинальный пример:

SELECT COUNT(*) AS MWith
FROM member m
    JOIN Channel mc
        ON mc.MemberID = m.id
    JOIN Client c
        ON c.id = m.clientid
    JOIN packages p
        ON p.id = m.packageid
WHERE Enroll > '2018'
      AND EXISTS
(
    SELECT *
    FROM activity a
    WHERE a.memberid = m.id
          AND a.code IN ( '785', 'a599' )
)
--   GROUP BY m.id;

Другие, более простые примеры, чтобы показать разницу:

-- returns an empty resultset
SELECT COUNT(*) FROM sys.databases
WHERE 1=0
GROUP BY name

-- returns: a single row with 0
SELECT COUNT(*) FROM sys.databases
WHERE 1=0

-- Another example with GROUP BY ALL
-- it returns one row per grouped value, with expected count = 0
SELECT COUNT(*) FROM sys.databases
WHERE 1=0
GROUP BY ALL name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...