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

5kgi1eie  于 2021-06-18  发布在  Mysql
关注(0)|答案(4)|浏览(352)

唯一的意思是,如果有一个值有一个重复项,就不要显示它们中的任何一个。
例子:

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

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

Penn State

问题是,只有一个学生上的学校。
我想在不使用count(*)的情况下执行此操作。

f4t66c6m

f4t66c6m1#

您可以在college字段和其他student上使用self-left连接,只返回那些不匹配的记录:

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
ulmd4ohb

ulmd4ohb2#

假设没有严格的副本,可以使用 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
                 );
ig9co6j1

ig9co6j13#

不使用的限制 count 听起来有点做作,但假设 student 以及 college 是唯一的,您可以比较每个学院的最大值和最小值,并确保它们是同一个学生:

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

twh00eeo4#

你可以用 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

相关问题