使用聚合函数返回错误结果的MySQL if语句

使用聚合函数返回错误结果的MySQL if语句,mysql,Mysql,我有一个问题 SELECT itemId, userId, source FROM table WHERE itemId = 1 AND userId = 1 and source = 1; 它返回20行,其中itemId为1,userId为1,例如,source为1。在我的数据库中,这个itemId和这个userId有更多的行,它们具有不同的来源。我想得到一些这方面的数据 那么,为什么该查询对唯一行和合计行都返回0 SELECT ID, IF(source = 1, COU

我有一个问题

SELECT
    itemId, userId, source
FROM table
WHERE itemId = 1 AND userId = 1 and source = 1;
它返回20行,其中itemId为1,userId为1,例如,source为1。在我的数据库中,这个itemId和这个userId有更多的行,它们具有不同的来源。我想得到一些这方面的数据

那么,为什么该查询对唯一行和合计行都返回0

SELECT ID, 
    IF(source = 1, COUNT(DISTINCT userId), 0) as 'unique', 
    IF(source = 1, COUNT(userId), 0) as 'total'
FROM table
WHERE itemId = 1 AND userId = 1;
GROUP BY itemId;
提前感谢。

使用条件计数


选择ID,或选择ItemID,?没有一些样本数据是不可能知道是什么错误的。但现在你有一些奇怪的事情。如果userId=1,那么COUNTDISTINCT userId也是1,不需要计算;在许多其他RDBMS和最新MySQL版本的默认配置中,甚至不允许这样的查询。对于ID,您也会得到类似的一些值结果。
 SELECT itemId
      , COUNT( DISTINCT CASE WHEN source = 1
                             THEN userId
                        END)  as 'unique'
      , COUNT( CASE WHEN source = 1
                    THEN userId
               END)  as 'total'
FROM yourTable
WHERE itemId = 1 AND userId = 1
GROUP BY itemId