簡體   English   中英

SQL 查詢 - 查找具有基數大於 1 的字段的記錄

[英]SQL Query - Find records with field that has cardinality greater than one

我有一個表中的記錄列表,其中包含用戶名和學期。 我想在整個表格中找到所有為他們列出一個以上唯一學期的用戶名。 所以如果我有:

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

我只想選擇 tester1,因為它在表中為該用戶名存在多個術語。

看起來這應該是一個非常簡單的 SQL 查詢,但我無法使用任何分組語句來使其工作。

您可以使用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

我會使用帶有帶有子句的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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM