Mysql计数和IF使用

Mysql计数和IF使用,mysql,sql,Mysql,Sql,我有一个结构为MySQL的表: | uid | itemid | ------------------- | 1001 | 9999 | 1001 | 8888 | 2002 | 8888 | ... | ... uid和itemid不是唯一的列。Bun uid+itemid是唯一的组合 我需要按itemid计算行数。我使用下一个查询: SELECT itemid, COUNT(*) FROM unlikes WHERE itemid

我有一个结构为MySQL的表:

| uid     |   itemid
| -------------------
| 1001    |   9999
| 1001    |   8888
| 2002    |   8888
| ...     |   ...
uiditemid不是唯一的列。Bun uid+itemid是唯一的组合

我需要按itemid计算行数。我使用下一个查询:

SELECT itemid, COUNT(*) 
FROM unlikes 
WHERE itemid IN ('9999', '8888') GROUP BY itemid;
这很有效

接下来,我需要知道哪一行有具体的uid。我使用:

SELECT itemid, COUNT(*), IF (uid = '1001', TRUE, FALSE) toggled 
FROM unlikes 
WHERE itemid IN ('9999', '8888') GROUP BY itemid;'

不工作。如果我有多个itemid=8888的行,那么toggled=FALSE。如果组中有一个uid=1001,我需要切换为TRUE

IF(uid='1001',TRUE,FALSE)
替换为
sum(当uid='1001'时,case为1,否则为0)
我发现这个解决方案:
COUNT(IF(uid=1001,NULL))被切换为
its bad?在
9999
的情况下,with
1001
也使用上述查询返回
TRUE
。对吗?@斯隆诺德。CASE语句是标准的SQL语句,在大多数数据库中都可用。您的表达式(或者更简单的SUM(uid1001))不是MySQL(可能还有一些其他数据库)的标准和特定表达式。
SELECT itemid, COUNT(*), 
CASE WHEN uid = 1001 THEN TRUE ELSE FALSE end AS toggled 
FROM unlikes 
WHERE itemid IN ('9999', '8888') GROUP BY itemid;