从表中仅选择唯一值,而不使用count(*)

时间:2018-09-23 21:10:42

标签: mysql sql select

通过唯一性,我的意思是如果某个值具有重复项,则不要显示它们中的任何一个。

示例:

Student    |    College
-----------------------
Jake       |    Harvard
Josh       |    Penn State
Erica      |    Harvard

所以在这种情况下,结果将是

Penn State

查询将类似于只有一个学生去的学校。

我想不使用count(*)来执行此操作。

4 个答案:

答案 0 :(得分:3)

不使用count的限制听起来有些人为,但是假设studentcollege的组合是唯一的,您可以比较每所大学的最大和最小数目,并确保它们是同一位学生:

SELECT   college
FROM     mytable
GROUP BY college
HAVING   MIN(student) = MAX(student)

答案 1 :(得分:3)

您可以在大学领域和其他学生上使用左撇子联接,并仅返回不匹配的记录:

select t1.college from yourtable t1
left join yourtable t2 on t1.collage=t2.college and t1.student<>t2.student
where t2.college is null

答案 2 :(得分:1)

您可以使用LAG()LEAD(),如下所示:

select
    *,
    lag(college) over(order by college) as prev_college
    lead(college) over(order by college) as next_college
  from my_table
  where college <> prev_college or prev_college is null
    and college <> next_college or next_college is null

答案 3 :(得分:1)

假设您没有严格的重复要求,则可以使用not exists来查看学院中是否还有其他学生:

select t.college
from t
where not exists (select 1
                  from t t2
                  where t2.college = t.college and t2.student <> t.student
                 );