查找没有值B的值A的计数

时间:2016-05-26 04:04:36

标签: mysql sql

ROW - NAME -  BRAND
____________________
1   - John -  Ford
2   - John -  BMW
3   - John -  Merc
4   - Mary -  Ford
5   - Mary -  VW
6   - James - Ford
7   - James - Jeep
8   - James - Lexus
9   - Susan - Jeep
10  - Susan - Lexus

如何在A列中找到B列中没有特定值的值。

A栏,比如说Name,不是唯一的,A中有多个具有相同值的行(因为同一个人可以有多辆车)

B栏,比如Car Brand,显示了这个人在A中拥有的汽车品牌。总共只有5个品牌可能,理想情况下每个人都应该拥有一个品牌 - 福特。

如何找到拥有其他车型但缺少福特的人的所有独特名称?在上面的例子中,我希望找到苏珊。

4 个答案:

答案 0 :(得分:2)

您可以使用聚合:

select name
from t
group by name
having sum(brand = 'Ford') = 0;

having子句计算与Ford匹配的行数。 = 0表示没有这样的行。

答案 1 :(得分:2)

我希望你在谈论这个。

SELECT DISTINCT name
FROM tablename
WHERE brand <> 'FORD';

答案 2 :(得分:1)

如果你需要所有其他4辆车的名字,但没有福特:

SELECT DISTINCT name FROM t
WHERE (SELECT COUNT(DISTINCT car) FROM t AS t2 WHERE t2.name=t.name)=4
AND (SELECT COUNT(*) FROM t AS t2 WHERE t2.name=t.name AND t2.car="Ford")=0

答案 3 :(得分:0)

有很多方法,但有一个答案是:

SELECT DISTINCT A
FROM T
WHERE A NOT IN (
    SELECT A
    FROM T
    WHERE B = 'Ford'
);