使用聚合函数返回错误结果的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