我有这样的数据集:
col1 col2
John 1
John 1
Emily 1
Emily 2
一个简单的select distinct col1 from table where col2 = 1
会让John和Emily回归。
我想要一个仅导致John的查询,因为Emily至少有一行其中col2不等于1。
有什么想法吗?
答案 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