在SQL中存在计数

问题描述 投票:0回答:1

为什么此查询不返回结果计数?如何让它显示计数

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
sql sql-server
1个回答
1
投票

空集是因为条款group by

解决方法是:

  1. 删除GROUP BY,因为m.id无论如何都不是输出的一部分
  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
© www.soinside.com 2019 - 2024. All rights reserved.