一个很经典问题,
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博客 ” ,链接:https://blog.itpub.net/22259926/viewspace-668255/ ,如需转载,请注明出处,否则将追究法律责任。