SQL language裡面的經典問題

張國平發表於2010-07-17

 

   一個很經典問題,

   S表示學生,結構為

   {

   sid                  int              primary key,

    sname       varchar[50],

   }

  T表示老師,結構為

  {

   tid                  int              primary key,

    tname       varchar[50],

   }

 

  S-T表示選課情況,結構為

   {

   sid                  int              not null   ,

     tid                  int              not null   ,

   }

現在求選某個老師的課的學生超過50的,老師ID.

如果用基本的select的語句,是很難做到,必須用到group by 和having

 1、group by和distinct,但是最大的不同就是可以進行帶條件的查詢

select distinct(tid) ,count(sid)
from S-T
where count(sid)>40

 這個會報錯

==========================================

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
對應的查詢

select tid ,count(sid)
from S-T
group by tid

當時這裡面不呢個用where,只可以用having來放入對於聚合的條件語句,

select tid ,count(sid)
from S-T
group by tid

having count(sid)>50

那麼where怎麼用,where可以針對沒有聚合的條件

select tid ,count(sid)
from S-T

where tid=1
group by tid

having count(sid)>50

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-668255/,如需轉載,請註明出處,否則將追究法律責任。

相關文章