SQL查询-查找基数大于1的字段的记录

时间:2019-07-03 19:07:28

标签: sql

我在一个表中有一个记录列表,其中包含用户名和学校用语。我想在整个表格中找到所有列出了多个唯一学期的用户名。所以如果我有:

Username      Term
-------------------
tester1       19/FA
tester1       19/SP
tester2       19/FA

我只想选择tester1,因为表中该用户名存在多个词。

看起来这应该是一个非常简单的SQL查询,但是我无法使用任何分组语句来使其正常工作。

2 个答案:

答案 0 :(得分:0)

您可以使用HAVING来过滤出行:

select username
from t
group by username
having count(distinct term) > 1

如果您的作业不允许您使用GROUP BY,则可以使用ROW_NUMBER()窗口函数来过滤出行。例如:

select username
from (
  select 
    username,
    row_number() over(partition by username order by term) as rn
  from t
  ) x
where rn = 2

答案 1 :(得分:0)

我会在带有Haven子句的情况下使用group by

select username
from t
group by username
having min(term) <> max(term);

如果要所有行,请使用窗口函数:

select t.*
from (select t.*,
             count(*) over (partition by username) as cnt
      from t
     ) t
where cnt > 1;

或存在:

select t.*
from t
where exists (select 1 from t t2 where t2.username = t.username and t2.term <> t.term);