簡體   English   中英

涉及在列中查找最頻繁元組值的 SQL 查詢

[英]SQL Query Involving Finding Most Frequent Tuple Value in Column

我有以下關系:

  • 教(ID,course_id,sec_id,學期,年)
  • 講師(ID,姓名,部門名稱,薪水)

我試圖將以下內容表達為 SQL 查詢:

找到教過最多課程的講師的 ID 和姓名(即在教中擁有最多的元組)。

我的查詢

select ID, name 
from teaches 
  natural join instructor
group by ID
order by count(*) desc

我知道這不正確,但我覺得我走在正確的軌道上。 為了回答這個問題,您需要處理這兩種關系,因此需要自然連接操作。 由於該問題詢問教授最多課程的講師,這告訴我我們正在嘗試計算每個講師 ID 在教授關系中出現的次數。 據我了解,我們希望計算不同的講師 ID,因此需要按命令分組。

不要使用自然連接:它們所做的只是依賴列名來決定哪些列跨表相關(它們不會像您想象的那樣檢查外鍵約束或類似的東西)。 這在本質上是不可靠的。

您可以使用常規inner join

select i.id, i.name 
from teaches t
inner join instructor i on i.id = t.sec_id
group by i.id, i.name
order by count(*) desc
limit 1

筆記:

  • 這假設列teaches.sec_idinstructor.id (我看不出可以使用哪個其他列)

  • 我在查詢中添加了一個limit子句,因為你說你想要頂級講師 - 語法可能因數據庫而異

  • 始終使用它們所屬的表作為列名的前綴,以使查詢明確且易於理解

  • 在聚合查詢中, select子句中列出的所有非聚合列都應該出現在group by子句中,這是一個很好的做法(也是許多數據庫的要求); 我將導師姓名添加到您的group by子句中

暫無
暫無

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

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