我有这张桌子:
+----+-----------+-------+
| id | client_id | is_in |
+----+-----------+-------+
| 1 | 1 | 0 |
+----+-----------+-------+
| 2 | 2 | 0 |
+----+-----------+-------+
| 3 | 1 | 1 |
+----+-----------+-------+
| 4 | 2 | 1 |
+----+-----------+-------+
| 5 | 3 | 1 |
+----+-----------+-------+
| 6 | 3 | 1 |
+----+-----------+-------+
| 7 | 1 | 0 |
+----+-----------+-------+
| 8 | 4 | 0 |
+----+-----------+-------+
| 9 | 4 | 0 |
+----+-----------+-------+
我需要获得'is_in'至少等于1的客户端数量,并且从未将'is_in'等于0(在本例中为client_id 3)。
为此,我提出了两个问题:
SELECT client_id FROM foo WHERE is_in = 1;
和
SELECT client_id FROM foo WHERE is_in = 0;
我计划到他们之间的INTERSECT,这样我就可以得到两个选项之间的公共条目,所以我只需要做“is_in = 1的客户端数” - “count(相交结果)”
但是INTERSECT不能和MYSQL一起使用,有没有替代INTERSECT在这种情况下工作或者更简单的方式来获得我需要的东西(我觉得我做的很复杂)。
谢谢。
答案 0 :(得分:1)
SELECT id, client_id FROM foo WHERE is_in = 1 AND client_id NOT IN (SELECT client_id FROM foo WHERE is_in = 0)
或者,如果您只需要客户编号:
SELECT DISTINCT client_id FROM foo WHERE is_in = 1 AND client_id NOT IN (SELECT client_id FROM foo WHERE is_in = 0)
答案 1 :(得分:0)
你可以如此总结它们并得到最小的值,按客户机ID分组,并将结果排除在任何零点之外。试试这个:
MonadFix