如果我们有两个这样的表
CREATE TABLE ta(`ID` int, `name` char(10));
INSERT INTO ta (`ID`, `name`)
VALUES
(1, 'A'),
(2, 'A'),
(3, 'B'),
(4, 'C'),
(5, 'B');
CREATE TABLE yourtable(`ID` int, `Val` int);
INSERT INTO yourtable (`ID`, `Val`)
VALUES
(1, 10),
(1, 20),
(1, 30),
(1, 30),
(2, 10),
(2, 20),
(3, 20),
(3, 20),
(4, 10),
(4, 20),
(5, 10),
(5, 20),
(5, 30);
而且,我需要name
使用两个表对值进行分组。而且,对于条件 val=10 或 val=30 它工作正常。http://sqlfiddle.com/#!2/9c099/1
select name, count(distinct t1.id)
from yourtable as t1, ta
where t1.id=ta.id
AND (val=10 OR val=30)
group by name
但是,对于条件(val=10 AND val!=30)我该如何查询呢?为此,输出应该是
Count
A 1
B 0
C 1
举个例子:以name=A为例,这里我们得到ID=1,2。因此,现在在您的表中,我们有 5 行 ID=1,2。对于 ID=1,val=10,20,20。对于 ID=2,val=10,20。这里只有 ID=2 满足 (val=10 AND val!=30) 所以,对于 name=A count=1