2012-09-08 64 views
0

我有MySQL的表结构:Mysql的COUNT和IF使用

| uid  | itemid 
| ------------------- 
| 1001 | 9999 
| 1001 | 8888 
| 2002 | 8888 
| ...  | ... 

UID为itemid不是唯一列。 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,那么比触发= FALSE。如果组中的一个有uid = 1001,我需要切换= TRUE;

+2

替换'IF(UID = '1001',TRUE,FALSE)'由'总和(情况下,当UID = '1001',那么1否则为0)' – danihp

回答

1
SELECT itemid, COUNT(*), 
CASE WHEN uid = 1001 THEN TRUE ELSE FALSE end AS toggled 
FROM unlikes 
WHERE itemid IN ('9999', '8888') GROUP BY itemid; 
+0

我发现此解决方案:'COUNT(IF(UID = 1001,NULL))AS切换'它的坏? –

+0

@SLonoed这是什么意思? – hims056

+0

使用上述查询,如果'9999'和'1001'也返回'TRUE'。正确? –