只有当所有行都是WHERE的值时,MySQL才返回单行

时间:2015-02-10 12:20:20

标签: mysql sql group-by

我有这样的数据集:

col1    col2
John    1
John    1
Emily   1
Emily   2

一个简单的select distinct col1 from table where col2 = 1会让John和Emily回归。

我想要一个仅导致John的查询,因为Emily至少有一行其中col2不等于1。

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

尝试使用having子句:

select col1 
from table 
group by col1 
having count(distinct col2) = 1
and min(col2) = 1

修改

萨尔曼的回答也很不错:

select col1 
from table 
group by col1  1
having count(*) = count(case when col2 = 1 then 1 else null end)

答案 1 :(得分:0)

如果您有唯一的ID列,则可以执行以下操作:

SELECT DISTINCT
    Col1
FROM
    table t1
    LEFT JOIN t2 ON t1.col1 = t2.col1 AND t1.col2 <> t2.col2 AND t1.ID < t2.ID
WHERE
    t1.col2 = 1
    AND t2.col1 IS NULL

该查询从表中获取所有行,并尝试在表中找到具有相同名称的另一行,但在col2中具有更高的值。

另一种方法是使用NOT EXISTS

SELECT DISTINCT
    col1
FROM
    table
WHERE
    col2 = 1
    AND NOT EXISTS (SELECT
                    NULL
               FROM
                    Table T2
               WHERE
                    Table.col1 = T2.col1
                    AND Table2.col2 <> T2.col2)

此查询查找表中没有任何其他行具有相同名称但在col2中具有不同值的所有行。

答案 2 :(得分:0)

我目前没有mySQL数据引擎,但这适用于MS-SQL引擎。 希望你能找到一些暗示。

select name, avg(cast(num as decimal(4,2) )) from test1
group by name
having  avg(cast(num as decimal(4,2) ))=1